1.作用:保证数据的一致性(由一组DML语句组成)

2.事务的关键字

开启事务:start trancation/set autocommit=false

设置保存点:savepoint 保存点;

回滚到某个保存点:rollback to 保存点;

回滚:rollback

注意事项:开始事务时,数据库会默认创建一个保存点,如果你希望回退,可以使用rollback,就可以直接回退到事务刚开始的时候

提交:commit

3.如果要实现事务效果,表的引擎必须支持事务,比如innodb

4.事物的隔离级别

概念:当不同的客户端或者不同的线程访问数据库的一张表,mysql提供一种机制来控制不同的客户端和线程对数据访问的权限,隔离级别定义了不同的事务之间的隔离程度,在不同的事务中看到的数据是不一样的.

5.事务的隔离级别分类:

a.读未提交(read uncommitted):可以读取还没有提交的数据,出现脏读

b.读已提交(read commited):可以读取已经提交的数据,但是出现幻读,认为读到的数据是假的,不会产生脏读;

c.可重复读(repeatable read):只有当前事务提交,然后再用新的事务读取数据,才可以读取已经提交的数据.不会产生幻读,脏读和非可重复

d.可串行化(serializable):当前事务只能进行查询,当其他事务对表进行修改时,数据库会创建一个队列存储sql语句(如果30秒后,查询事务仍未提交,则sql语句放弃等待),当查询事务提交后,再执行

6.事务隔离级别带来的问题

脏读:一个事务修改数据,事务没有提交,另一个事务可以读取到

幻读(虚读):同一个查询在同一个事务出现多次,由于其它事务的修改,造成每次返回的结果集都不同,认为返回的数据是假的

不可重复读:同一个查询在同一个事务出现多次,由于其它事务的修改,造成每次返回的结果集都不同,此时发生非重复读

7.修改事务隔离级别:

SET session TRANSACTION ISOLATION LEVEL 事务隔离级别名称;

8.事务特性(acid)

原子性:事务是一个不可分割的单位

一致性:事务必须是一个数据库从一个状态变换到另一状态

隔离性:

持久性;一个事务一旦被提交,它对数据库的改变是永久性的

9.事务命令:

查看当前会话隔离级别:select @@tx_isolation

查看系统当前隔离级别:select @@global.tx_isolation

设置当前会话隔离级别:

SET session TRANSACTION ISOLATION LEVEL 事务隔离级别名称

设置系统当前隔离级别:

SET global TRANSACTION ISOLATION LEVEL 事务隔离级别名称

mysql默认的事务隔离级别:repeatable read