一、事务的概念
事务是一个或多个数据库操作(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 [保存点名称] 删除