1.基本概念
- 将一条或者多条SQL看成一个整体,要么同时执行成功要么同时执行失败,这就是事务。
事务举例:
张三给李四转账500元钱,需要让三账户的余额-500,李四的账户余额+500,转账是一个连续的过程,要么同时成功,要么同时失败。不能出现张三转出了500块,而李四没收到的情况,这将是很严重的问题。
2.事务的基本使用
执行SQL语句之前开启事务,执行后没异常就提交,有异常就回滚
<1>开启事务:在执行一组sQL操作之前开始事务,start transaction;
提交了之后是不是不能回滚
<2>提交事务:在一组sQL执行成功之后提交事务,commit;
如果开启事务不提交,那么默认就是回滚【断开连接】
<3>回滚事务:在一组SQL执行出现异常之后回滚事务,rollback;
举例【执行后,发现查询结果出错则回滚,正确则提交】:
-- 张三给李四转账500元-- 开启事务
START TRANSACTION;-- 1.张三账户-500
UPDATE account SET money=money-500 WHERE NAME='张三';出错了...-- 2.李四账户+500
UPDATE account SET money=money+500 WHERE NAME='李四';-- 回滚事务
ROLLBACK;-- 提交事务
COMMIT;
补充–try里面使用commit提交事务,catch里面使用rollback回滚事务
3.事务的提交方式
1代表自动提交 0代表手动提交[COMMIT;]
- 查询事务提交方式:SELECT @@AUTOCOMMIT;
SELECT @@autocommit;
- 修改事务提交方式:SET @@AUTOCOMMIT=数字;
SET @@autocommit = 1;
SELECT @@autocommit;
4.事务的四大特征(ACID)
<1> 原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚。
因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
<2> 一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态。
也就是说一个事务执行之前和执行之后都必须处于一致性状态。
<3> 隔离性(isolcation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务。
不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
<4> 持久性(durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的。
即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
5.事务的隔离级别
- 多个事务之间是隔离的,相互独立的。但是如果多个事务操作同一批数据,则会引发一些问题,设置不同的隔离级别就可以解决这些问题。
- 产生条件是要在两个新连接中操作【如两台电脑,获取一台电脑连接数据库两次】,不是一个连接中的两个查询窗口。
<1>设置隔离级别
可重复读:两次读取的数据一样
不可重复读:两次读取的数据不一样【问题:多人操作时所看到的数据有差异】
<2>存在的问题
<3>查询隔离级别以及设置隔离级别
-
数据库查询隔离级别:
select @@tx_isolation;
-
数据库设置隔离级别(修改后需要重新连接):
set global transaction isolation level 级别字符串;