1、什么是事务?sql
数据库事务(Transaction)是访问并可能操做各类数据项的一个数据库操做序列,这些操做要么所有执行,要么所有不执行,是一个不可分割的工做单位。事务由事务开始与事务结束之间执行的所有数据库操做组成。数据库
例如:从A帐号给B帐号转账,对应于以下两条sql语句 update from account set money=money+100 where name=‘b’; update from account set money=money-100 where name=‘a’;
这两条update语句应该做为一个总体来运行,要保证同时成功,或者同时失败;不该该存在一个成功,一个失败的状况。并发
2、数据库开启事务命令spa
咱们可使用下面的语句来开启或者结束一个事务。线程
例如,咱们能够把上面的银行转帐的update语句放到一个事务中执行。code
start transaction; update from account set money=money+100 where name=‘b’; update from account set money=money-100 where name=‘a’; commit;
3、事务的特征:ACID事务
4、事务的隔离级别ci
多个线程开启各自事务操做数据库中数据时,数据库系统要负责隔离操做,以保证各个线程在获取数据时的准确性。rem
若是不考虑隔离性,可能会引起以下问题:it
数据库共定义了四种隔离级别:
Serializable:可避免脏读、不可重复读、虚读状况的发生。(串行化) Repeatable read(MySQL的默认值):可避免脏读、不可重复读状况的发生。(可重复读) Read committed:可避免脏读状况发生(读已提交)。 Read uncommitted:最低级别,以上状况均没法保证。(读未提交)
咱们能够能够经过下面的语句来查看MySQL的事务隔离级别和设置隔离级别:
set (GLOBAL|SESSION) transaction isolation level 设置事务隔离级别 select @@tx_isolation 查询当前事务隔离级别
下面的语句将查看MySQL数据库当前的事务隔离级别。
下面的语句将MySQL的事务隔离级别设置成read committed,在这种隔离级别下,将会发生脏读的问题。