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