一、事务的概念

事务是一个或多个数据库操作(dml语句),要么全部成功,要么全部回滚,事务是由事务日志来实现的,事务日志有redo log 和undo log

二、事务的作用

为了保证复杂数据库操作数据的一致性,尤其是在并发访问数据时,mysql主要用于处理操作量大,复杂的数据

三、事务的特点

1.原子性( Atomicity 不可分割性):事务的数据操作,要么同时成功,要么回滚到执行前的状态,向什么都没发生一样

2.隔离性(Isolation ):多个事务之间是相互隔离,互不影响的,多个事务可以同时对数据库数据进行读写和修改操作,隔离性可以防止多个事务交叉执行导致数据不一致

3.一致性(Consistency):在事务执行前和执行后,数据的状态保持一致,不会破坏数据库的完整性

4.持久性(Durability):在事务提交后,数据会被永久刷新到磁盘中,即使出现故障,也不会导致数据消失

四、事务的语法

1.事务的启动语法

(1)begin

(2)start transaction  [修饰符]

-read only  只读

-read write 读写 默认

-with consistent snapshot 一致性读

2.标准的事务语句

DML语句(insert  delete update)

3.事务结束

(1)commit;

(2)rollback;

五、事务的自动提交机制

mysql> select @@autocommit;
+--------------+
| @@autocommit |
+--------------+
| 1 |
+--------------+

在线修改参数:

(1) 会话级别:

mysql> set autocommit=0;

及时生效,只影响当前登录会话

(2)全局级别:

mysql> set global autocommit=0;

断开窗口重连后生效,影响到所有新开的会话

(3)永久修改(重启生效)

vim /etc/my.cnf
autocommit=0

六、触发隐式提交的几种情况

1.事务开始后,执行DML语句时,中间插入DDL语句,导致事务提交

导致提交的非事务语句:

DDL语句: (ALTER、CREATE 和 DROP)

DCL语句: (GRANT、REVOKE 和 SET PASSWORD)

锁定语句:(LOCK TABLES 和 UNLOCK TABLES)

导致隐式提交的语句示例:

TRUNCATE TABLE

LOAD DATA INFILE

SELECT FOR UPDATE

七、事务的保存点

在数据库语句中打几个点,在调用rollback语句时,就可以滚回那个点

1.语法:

(1)savepoint [保存点名称]//标记保存点

(2)rollback  to [保存点名称]//回滚到保存点位置

(3)release [保存点名称] 删除