文章目录
事务操作
方式一
查看/设置事务提交方式
会话参数,当前窗口有效
SELECT @@autocommit ; 默认为1,自动提交
SET @@autocommit = 0 ; 设置为手动提交
sql语句执行完了之后不会执行提交
手动执行指令提交到数据库,提交事务
COMMIT ;
回滚事务
ROLLBACK ;
方式二
开启事务
START TRANSACTION
或者
BEGIN
提交事务
COMMIT ;
回滚事务
ROLLBACK ;
事务四大特性
原子性 (Atomicity):
事务是不可分割的最小操作单元,要么全部成功,要么全部失败
一致性(Consistency):
事务完成时,必须使所有的数据都保持一致状态。
隔离性(lsolation):
数据库系统提供的隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
持久性 (Durability):
事务一旦提交或回滚,它对数据库中的数据的改变就是永久的
并发事务问题
脏读
一个事务读到另外一个事务还没有提交的数据。
不可重复读
一个事务先后读取同一条记录,但两次读取的数据不同,称之为不可重复读。
幻读
一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻影”。
事务隔离级别
read uncommitted 读未提交
都会出现
一个事务可以读取另一个未提交事务的数据。
read committed 读已提交(oracal默认)
解决脏读
一个事务要等另一个事务提交后才能读取数据。
repeatable read 可重复读(mysql默认)
解决脏读,不可重复读
在开始读取数据(事务开启)时,不再允许修改操作
serializable 串行化
解决脏读,不可重复读,幻读
最高的事务隔离级别,在该级别下,事务串行化顺序执行
设置事务隔离级别
查看事务隔离级别 @@查看当前系统变量相信
SELECT @@TRANSACTION ISOLATION:
-设置事务隔离级别
SESSION 会话级别,当前对话有效
GLOBAL 全局有效
SET [ SESSION | GLOBAL ]
TRANSACTION ISOLATION LEVEL
{READ UNCOMMITTED I READ COMMITTED I REPEATABLE READ I SERIALIZABLE};