文档库 最新最全的文档下载
当前位置:文档库 › mysql-front

mysql-front

auto_increment 自动增长主键

mysql 存储引擎 (表类型)
查询引擎: show engines;
三种存储引擎 ****************(重要)
transactions 事物
innoDB 5.0版本支持事物,MySQL 5.1不支持ISAM。 行锁定。
MyISAM 3.23版本使用的存储引擎。低级别 表锁定。
BerkeleyDB(BDB)也是支持事物。页级别锁定 页锁定。

memoey 内存引擎 csv 引擎存储在文件中 example 样列引擎不储存 archive 存档引擎 fder储存在远程

引擎之间的区别:
(1)支持字段数据类型
(2)锁定类型
(3)索引 ------------->数据库没他就想死水
(4)事物处理


各存储引擎之间的区别

为了做出选择哪一个存储引擎的决定,我们首先需要考虑每一个存储引擎提供了哪些不同的核心功能。这种功能使我们能够把不同的存储引擎区别开来。我们一般把这些核心功能分为四类:支持的字段和数据类型、锁定类型、索引和处理。一些引擎具有能过促使你做出决定的独特的功能,我们一会儿再仔细研究这些具体问题。

字段和数据类型

虽然所有这些引擎都支持通用的数据类型,例如整型、实型和字符型等,但是,并不是所有的引擎都支持其它的字段类型,特别是BLOG(二进制大对象)或者TEXT文本类型。其它引擎也许仅支持有限的字符宽度和数据大小。

这些局限性可能直接影响到你可以存储的数据,同时也可能会对你实施的搜索的类型或者你对那些信息创建的索引产生间接的影响。这些区别能够影响你的应用程序的性能和功能,因为你必须要根据你要存储的数据类型选择对需要的存储引擎的功能做出决策。

锁定

数据库引擎中的锁定功能决定了如何管理信息的访问和更新。当数据库中的一个对象为信息更新锁定了,在更新完成之前,其它处理不能修改这个数据(在某些情况下还不允许读这种数据)。

锁定不仅影响许多不同的应用程序如何更新数据库中的信息,而且还影响对那个数据的查询。这是因为查询可能要访问正在被修改或者更新的数据。总的来说,这种延迟是很小的。大多数锁定机制主要是为了防止多个处理更新同一个数据。由于向数据中插入信息和更新信息这两种情况都需要锁定,你可以想象,多个应用程序使用同一个数据库可能会有很大的影响。 不同的存储引擎在不同的对象级别支持锁定,而且这些级别将影响可以同时访问的信息。得到支持的级别有三种:表锁定、块锁定和行锁定。支持最多的是表锁定,这种锁定是在MyISAM中提供的。在数据更新时,它锁定了整个表。这就防止了许多应用程序同时更新一个具体的表。这对应用很多的多用户数据库有很大的

影响,因为它延迟了更新的过程。

页级锁定使用Berkeley DB引擎,并且根据上载的信息页(8KB)锁定数据。当在数据库的很多地方进行更新的时候,这种锁定不会出现什么问题。但是,由于增加几行信息就要锁定数据结构的最后8KB,当需要增加大量的行,也别是大量的小型数据,就会带来问题。

行级锁定提供了最佳的并行访问功能,一个表中只有一行数据被锁定。这就意味着很多应用程序能够更新同一个表中的不同行的数据,而不会引起锁定的问题。只有InnoDB存储引擎支持行级锁定。

建立索引

建立索引在搜索和恢复数据库中的数据的时候能够显著提高性能。不同的存储引擎提供不同的制作索引的技术。有些技术也许会更适合你存储的数据类型。

有些存储引擎根本就不支持索引,其原因可能是它们使用基本表索引(如MERGE引擎)或者是因为数据存储的方式不允许索引(例如FEDERATED或者BLACKHOLE引擎)。

事务处理

事务处理功能通过提供在向表中更新和插入信息期间的可靠性。这种可靠性是通过如下方法实现的,它允许你更新表中的数据,但仅当应用的应用程序的所有相关操作完全完成后才接受你对表的更改。例如,在会计处理中每一笔会计分录处理将包括对借方科目和贷方科目数据的更改,你需要要使用事务处理功能保证对借方科目和贷方科目的数据更改都顺利完成,才接受所做的修改。如果任一项操作失败了,你都可以取消这个事务处理,这些修改就不存在了。如果这个事务处理过程完成了,我们可以通过允许这个修改来确认这个操作。



1.数据库为什么引入了索引 ?
为了提高检索数据的能力,数据库引入了索引机制。

用户对数据库最频繁的操作是进行数据查询。一般情况下,数据库在进行查询操作时需要对整个表进行数据搜索。
当表中的数据很多时,搜索数据就需要很长的时间,这就造成了服务器的资源浪费。
为了提高检索数据的能力,数据库引入了索引机制。

2.有关“索引”的比喻
从某种程度上,可以把数据库看作一本书,把索引看作书的目录,通过目录查找书中的信息,显然较没有目录的书方便、快捷。


3.数据库索引实际是什么 也叫定义?(两部分组成)
索引是一个单独的、物理的数据库结构,它是某个表中一列或若干列值的集合和相应的指向
表中物理标识这些值的数据页的逻辑指针清单。

2,索引有什么作用?
答:关键目的是为了加快检索速度而建立的,提高数据库查询和应用程序的性能。
索引可以减少为返回查询结果集而必须读

取的数据量。
索引还可以强制表中的行具有唯一性,从而确保表数据的数据完整性。

3,索引分为哪几种类型?
答:聚集索引和非聚集索引,唯一索引。
-------------------------------------------------------------------------------------------

mysql 2010-03-29日 星期一 上午索引:

1.索引的概念:
索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。
在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息。
在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库。

2.索引在表中的角色
一个表的存储是由两部分组成的,一部分用来存放表的数据页面,另一部分存放索引页面。
索引就存放在索引页面上,

3.索引高效原理
通常,索引页面相对于数据页面来说小得多。当进行数据检索时,系统先搜索索引页面,
从中找到所需数据的指针,再直接通过指针从数据页面中读取数据。

********************************重要的****************************************
4.索引的优点
1.创建唯一性索引,保证数据库表中每一行数据的唯一性
2.大大加快数据的检索速度,这也是创建索引的最主要的原因
3.加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4.在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5.通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能。

5.索引的缺点
1.创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加
2.索引需要占物理空间,如果要建立聚簇索引,那么需要的空间就会更大 ,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,
3.当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度

6.聚簇索引:物理索引,与基表的物理顺序相同,数据值的顺序总是按照顺序排列

7.聚集索引和非聚集索引的根本区别:是表记录的排列顺序和与索引的排列顺序是否一致,
聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,
因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定物理的紧跟其后。
聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,
而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。

********************************重要的******************************

**********
8. 建议使用聚集索引的场合为:
a.此列包含有限数目的不同值。
b.查询的结果返回一个区间的值。
c.查询的结果返回某值相同的大量结果集。


9.非聚集索引指定了表中记录的逻辑顺序,但记录的物理顺序和索引的顺序不一致,
聚集索引和非聚集索引都采用了B+树的结构,但非聚集索引的叶子层并不与实际的数据页相重叠,
而采用叶子层包含一个指向表中的记录在数据页中的指针的方式。非聚集索引比聚集索引层次多,
添加记录不会引起数据顺序的重组

********************************重要的****************************************
10.建议使用非聚集索引的场合为:
a.此列包含了大量数目不同的值;
b.查询的结束返回的是少量的结果集;
c.order by 子句中使用了该列。

11.直接创建索引和间接创建索引
直接创建索引: CREATE INDEX mycolumn_index ON mytable (myclumn)
间接创建索引:定义主键约束或者唯一性键约束,可以间接创建索引

12.建索引:CREATE INDEX indexName ON mytable(字段名(length));
如果是CHAR,VARCHAR类型,length可以小于字段实际长度;
如果是BLOB和TEXT类型,必须指定 length,下同。

13.删除索引:DROP INDEX 索引名 ON 表名

14.普通索引和唯一性索引
普通索引:CREATE INDEX mycolumn_index ON mytable (myclumn)
唯一性索引:保证在索引列中的全部数据是唯一的,对聚簇索引和非聚簇索引都可以使用
CREATE UNIQUE INDEX myclumn_cindex ON mytable(mycolumn)

15.单个索引和复合索引
单个索引:即非复合索引
复合索引:又叫组合索引,在索引建立语句中同时包含多个字段名
mysql> create index nsy on a(name(10),sex(5));

********************************重要的****************************************
16.六、索引的使用
1.当字段数据更新频率较低,查询使用频率较高并且存在大量重复值是建议使用聚簇索引
2.经常同时存取多列,且每列都含有重复值可考虑建立组合索引
3.复合索引的前导列一定好控制好,否则无法起到索引的效果。
如果查询时前导列不在查询条件中则该复合索引不会被使用。前导列一定是使用最频繁的列
4.多表操作在被实际执行前,查询优化器会根据连接条件,列出几组可能的连接方案并从中找出系统开销最小的最佳方案。
连接条件要充份考虑带有索引的表、行数多的表;内外表的选择可由公式:外层表中的匹配行数*内层表中每一次查找的次数确定,乘积最小为最佳方案
5.where子句中对列的任何操作结果都是在sql运行时逐列计算得到的,因此它不得不进行表搜索,

而没有使用该列上面的索引;
如果这些结果在查询编译时就能得到,那么就可以被sql优化器优化,使用索引,避免表搜索(例:select * from record where substring(card_no,1,4)=’5378’
&& select * from record where card_no like ’5378%’)任何对列的操作都将导致表扫描,它包括数据库函数、计算表达式等等,查询时要尽可能将操作移至等号右边
6.where条件中的’in’在逻辑上相当于’or’,所以语法分析器会将in (’0′,’1′)转化为column=’0′ or column=’1′来执行。
我们 期望它会根据每个or子句分别查找,再将结果相加,这样可以利用column上的索引;
但实际上它却采用了"or策略",即先取出满足每个or子句的行,存入临时数据库的工作表中,再建立唯一索引以去掉重复行,最后从这个临时表中计算结果。
因此,实际过程没有利用column上索引,并且完成时间还要受tempdb数据库性能的影响。in、or子句常会使用工作表,使索引失效;如果不产生大量重复值,可以考虑把子句拆开;拆开的子句中应该包含索引

1.字段更新频率低,查询频率高,有大量重复值建议使用聚簇索引。
2.存取多列,且每列都含有重复值,考虑建立组合索引。
3.复合索引的前导列是使用最频繁的列。
4.多表操作在被实际执行前,查询优化器会根据连接条件,优先使用索引的表.
5.任何对列操作都会导致对表全盘的扫描,可能引起索引失效,尽可能的将对列的操作放在等号右边。
6.in,or子句常会使用工作表where条件语句中,可能引起索引失效。
7.避免在为NULL值列中建立索引,可能引起索引失效。

********************************重要的****************************************

----------------------------------------------------------------------------------------------


mysql 2010-03-29日 星期一 下午视图:

1. 视图是一个虚拟表,其内容由查询定义。同真实的表一样,视图包含一系列带有名称的列和行数据。
但是,视图并不在数据库中以存储的数据值集形式存在。
行和列数据来自由定义视图的查询所引用的表,并且在引用视图时动态生成。

2, 视图的作用:1.简单性。2.安全性。

3、视图的优点
(1)视图能简化用户的操作
(2)视图机制可以使用户以不同的方式查询同一数据
(3)视图对数据库重构提供了一定程度的逻辑独立性
(4)视图可以对机密的数据提供安全保护

4.创建视图:CREATE VIEW student(视图名) AS SELECT * FROM a(表名);

5.视图与表的区别:
1、表的数据是存储在磁盘上,而视图在默认情况下物理上是不存在的;
2、视图由表派生出来的一个数据库

对象,视图又叫虚表;
3、唯一物理存在的只有视图名和从表中查询行的方法。

6.视图的作用:
1、限制表中特定行和列的使用,因此视图可以用来控制一个或多个表中特定部分的访问;
2、简化操作,隐藏复杂查询;
3、安全性,让客户只能看到视图,没有操作的任何权限;
4、合并分割数据;
5、将插入或更新数据限制在一定范围中。

********************************重要的****************************************
7.删除数据delete和truncate的区别:
1、truncate是逐页删除数据的而delete是逐行删除的,所以说truncate比delete删除速度要快
2、truncate操作立即生效,原数据不放到回滚段中,不能回滚,删除数据没有日志文件不能恢复,而delete这个操作会放到回滚段中,事务提交之后才生效;可以恢复。
3、delete语句是dml,如果有相应的触发器,执行的时候将被触发. truncate是ddl, 操作不触发触发器.
4.delete删除数据后,当从新创建一个表格时字段从以前的纪录增加,truncate创建时从新开始创建。
5.delete可是使用where进行条件删除,而truncate不能使用where条件删除。


8.MySQL表的复制
创建表的副本:
创建一个完全和上表表结构一样,数据也一样的新表,即直接复制原表的表结构可以用如下SQL语句
/*
用子查询,创建表,表的结构呢完全和nickname一致,并且数据也相同
*/
create table new_nickname select * from nickname;
只创建含有特定字段的表副本:
有的时候呢,我需要一个新表,只需要有昵称表的name与desc两个字段即可,不需要id字段,同样使用子查询,不过不再是select * 而是直接select 想要的字段即可
/*
因为只想要name和desc字段,所以我只查询原表的这两个字段即可
*/
create table new_nickname select name, desc from nickname;
只创建含有约束条件的值的表副本:
比如说,突然间我只想要那个id < 3的昵称表的所有数据咋办呢?(我不是 矫情啊,是为了举例啊!)这个时候,我们就需要为子查询加上条件限制,where 语句大家没有忘吧?
/*
限定条件,只要id<3的数据
*/
create table new_nickname select * from nickname where id < 3;
只复制表结构,咱爷们不要表数据:
有的时候呢,我只想复制旧表的表结构,至于里面的数据呢?已经old了,我是不想要的,即我只想复制一个表的表结构,这个时候咋办呢?别怕,我教你三种方法,均可解决此问题。
/*
和上面复制特定数据一样,只不过呢,咱这个条件弄个恶心点的,
当0=1的时候我才要你的数据,显然不会复制任何数据了
*/
create table new_nickname select * from nickname where 0 = 1;
上面的方法是取巧,因为没有合格的数据符合限

制条件,所以被复制的当然只有表结构了。另外MySQL提供了一个现成的语法,那就是:create table new_talbe_name like old_table_name;
/*
应用create table like 语法,只复制表结构
*/
create table new_nickname like nickname;
第三种方法就是用咱们之前取过外键key_id的方法,显示创建表时的SQL语句然后复制,显示建表语句的方法为:show create table table_name;
复制旧表部分结构,同时增加新字段:
人都要创新嘛,社会在进步,如果还停留不前的话是会淘汰的,所以咱也不能单纯的复制,也要有点自己的个性,在我的地盘听我的嘛。比如说复制昵称表的同时呢,我要创建一个新的字段,就是昵称创建日期字段。嗯。
/*
咱也个性点,新字段咋的也得先声明一下,再复制想要的那部分字段,嘿嘿
*/
create table new_nickname (create_time date not null, status enum('1','2')) select name, desc from nickname;

-------------------------------------------------------------------------------------------------

mysql 2010-03-30日 存储过程

1.什么是存储例程?
存储例程是存储在数据库服务器中的一组sql语句,
通过在查询中调用一个指定的名称来执行这些sql语句命令。

2.存储过程:(*****)是一组为了完成特定功能的SQL语句,经过编译后存储在数据库服务器之中。

3.优点:1、减少应用程序的逻辑复杂性;(***************)
2、存储过程允许模块化设置;
3、存储过程创建后,可以多次调用,对存储过程的修改对应用程序毫无影响;
4、存储过程可以快速的执行效率;
5、能够减少网络流量;
6、可以作为一种安全机制来充分利用。
7.防止mysql被攻击。

4.存储过程有四种:1.无参数。2.输入参数。3.输出参数 4.输入输出参数。
区别1.过程无返回值但可以有多个输出参数与函数有且只有一个返回值。
创建存储过程:
1.mysql> create procedure aa() select 'hello world';
2.create PROCEDURE bbb(in x varchar(10)) select 'x';
create PROCEDURE bb(out x varchar(10)) select 'x';

设值:1.set 2.select '值' into x;

5.调用存储过程:
mysql> call aa();
+-------------+
| hello world |
+-------------+
| hello world |
+-------------+

6.连接一个表:mysql> create procedure ask() select * from aa;

create function f1() returns int return 1000;
select f1();
---------------------------------------------
CREATE FUNCTION `f1`(id int) RETURNS char(11)
begin
return (select name from student where student.id=id);
end;
select f1(1);
1.过程无返回值但可以有多个输出参数与函数有且只有一个返回值。

-----------------------------------------------------------------------------------------
mysql2010-03-31日 上午 游标:

1.游标:(******)定义:它是一种能

从包括多数据记录的结果集中,每次只读一条记录的机制,
把集合操作转换成单个记录处理方式,游标机制允许用户在数据库内逐行的访问这些记录,
按照用户自己的意愿来显示和处理这些记录。

2.游标的使用过程:
1.声明游标(定义游标)。
2.打开游标。
3.使用游标。
4.关闭游标。

3.例题:
create PROCEDURE `cursor2`()
begin
declare cname varchar(10);
declare csex varchar(10);
DECLARE isfound int default 3;
DECLARE cs2 cursor for select * from cursor1;
declare CONTINUE HANDLER FOR NOT FOUND SET isfound = 0;
open cs2;
FETCH cs2 into cname,csex;
WHILE(isfound=3) do
SELECT cname,csex;
FETCH cs2 into cname,csex;
end while;
close cs2;
end;
----------------------------------------------------------------------------------------

mysql2010-03-31日 下午 触发器:
**********重点*********
3.触发器与存储过程的区别:1.是一种特殊的存储过程 2.系统自动调用。
最主要的其别我认为就是触发器是事件触发自动执行的存储过程需要调用执行。

4. 触发器:定义:对一个特点表格中发生特定操作时,所激活的一种机制,
当事件(update insert delete)发生时,才被自动激活,不能够显示的调用。

5.触发器包括三个组成部分:
1.触发器名
2.触发器的动作(insert,update,delete)
3.触发器中操作的执行过程

6.类型:1.事前触发。2.事后触发。

7.触发频率:1.语句级。2.行级。

8.触发器是一种特殊类型的存储过程,它不同于我们前面介绍过的存储过程。
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。
当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时, 数据库系统就会自动执行触发器所定义的SQL 语句,
从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。
创建事前触发器
create TRIGGER xt BEFORE insert on one For each row
BEGIN
insert into two values('111');
end;

创建事后触发器新建
create TRIGGER xt2 AFTER insert on one For each row
BEGIN
insert into two values(new.a);
end;

创建事后触发器删除
create TRIGGER xt2 AFTER insert on one For each row
BEGIN
insert into two values(old.a);
end;

创建事后触发器修改
create TRIGGER xt2 AFTER insert on one For each row
BEGIN
insert into two values(old/new.a);
end;

------------------------------------------------------------------------------------------

2010-4-1日 ACID事务概念 下午

ACID(Atomic、 Consistent、 Isolated、 Durable)即:事务的原子性、一致性、隔离性及持久性。

事务的原子性是指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这 个事务可

以分成两个步骤:1划卡,2出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成.
事务的一致性是指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了a+b=10,一个事务改变了a,那么b也应该随之改 变.
事务的隔离性是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致.
事务的持久性是指事务运行成功以后,就系统的更新是永久的.不会无缘无故的回滚.

1*database设计流程:*需求分析 -> 概念结构设计 -> 逻辑结构设计 ->
物理结构设计 -> 数据库实施 -> 数据库运行与管理。

-------------------------------------------------------------------------------------------

2010-4-2日 上午:

phpmyadmin mysql客户端工具
找到C:\ComsenzEXP\wwwroot\phpMyAdmin 文件config.inc.php 6033改变成3306改变成自己的端口。

数据库ER图有三种关系:1.(1:1)一对一2.(1:n)一对多,多对一3.(m:n)多对多
数据库ER图1.实体为方形 2.属性为椭圆形 3.表名关系为菱形。

-------------------------------------------------------------------------------------------
2010-4-3 日 上午

1.数据库建模工具。1.powerdesigner 2.together 3.ERwin 4.rose


2010-4-3 日 下午

1.sql优化:
(0)SELECT子句中避免使用 ‘ * ‘。
(1)尽量使用(NOT) EXISTS 替代( NOT)IN这样的操作.exists>in>or
(2)对列的操作,尽可能的将对列的操作放在等号右边。
(3)索引列不应该有null值。
(4)from与where中的表顺序规则(数据多的放前面,数据小的放后面因为它从右到左执行,而where相反)。
(5)like子句中的通配符%放在前面索引会失效。
(6)避免相关子查询应换成简单子查询。
(7)尽量使用前条件,用where子句替换having子句。
(8)where条件之后的列建立索引。

explain select id(字段) test(表名);

2.数据字典:是各类数据描述的集合,他是数据库的描述不是数据本身,通常包括:
1.数据项,2.数据结构,3.数据流,4.数据存储,5.数据处理过程。
数据字典至少要包函每个字段的数据类型,和在每个表中的主外键。

-------------------------------------------------------------------------------------------------

2010-4-8日 下午 rowset技术

1. RowSet 简介

javax.sql.rowset 自 JDK 1.4 引入,从 JDK 5.0 开始提供了参考实现。
它主要包括 CachedRowSet,WebRowSet,FilteredRowSet,JoinRowSet 和 JdbcRowSet。
除了 JdbcRowSet 依然保持着与数据源的连接之外,其余四个都是 Disconnected RowSet。

相比较 java.sql.ResultSet 而言,RowSet 的离线操作能够有效的利用计算机越来越充足的内存,
减轻数据库服务器的负担,由于数据操作都是在内存中进行然后批量提交到数据源,
灵活性和性能都有了

很大的提高。RowSet 默认是一个可滚动,可更新,可序列化的结果集,
而且它作为 JavaBeans,可以方便地在网络间传输,用于两端的数据同步。

2.RowSet 接口说明

CachedRowSet 最常用的一种 RowSet。
其他三种 RowSet(WebRowSet,FilteredRowSet,JoinRowSet)都是直接或间接继承于它并进行了扩展。
它提供了对数据库的离线操作,可以将数据读取到内存中进行增删改查,再同步到数据源。
可串行化,可作为 JavaBeans 在网络间传输。支持事件监听,分页等特性。
WebRowSet 继承自 CachedRowSet,并可以将 WebRowSet 写到 XML 文件中,也可以用符合规范的 XML 文件来填充 WebRowSet。
FilteredRowSet 通过设置 Predicate(在 javax.sql.rowset 包中),提供数据过滤的功能。
可以根据不同的条件对 RowSet 中的数据进行筛选和过滤。
JoinRowSet 提供类似 SQL JOIN 的功能,将不同的 RowSet 中的数据组合起来。
目前在 Java 6 中只支持内联(Inner Join)。
JdbcRowSet 对 ResultSet 的一个封装,使其能够作为 JavaBeans 被使用,是唯一一个保持数据库连接的 RowSet。


1.jdbc batch 操作(批处理)
2.jdbc 事务
(1).手动提交事务
connection.setAutoCommit(false);
中间为sql语句
https://www.wendangku.net/doc/535620615.html,mit();
connection.rollback();
(2).自动提交事务
connection.setAutoCommit(true);
中间为sql语句
https://www.wendangku.net/doc/535620615.html,mit();
connection.rollback();



































相关文档