事务操作有个特征:
要么都成功,要么都失败。
成功就提交commit;
失败就回滚rollback;
--事务开始
start transaction ;
--或是用begin
begin
--回滚事务
rollback;
--提交事务
commit;
事务的四大特性:
1.原子性(atomicity)
事务是最小操作单元不可再分割,要么全都成功,要么全都失败;
2.一致性(consistency)
事务完成时,所有的数据必须保持一致
3.隔离性(isolation)
数据库有隔离机制,保证事务在不受外部并发操作影响的独立环境下运行
4.持久性(durability)
事务一量提交或是回滚,对数据库的操作改弯是永久性的。
并发事务导致的问题:
1.脏读:一个事务读到另一个事务还没有提交的数据;
2.不可重复读:一个事务先后读到同一条记录,但两次读取的数据不同,叫不可重复读;
3.幻读:一个事务按照条件查询数据时,没有对应的数据行,但是在插入数据时,又发现这行数据已经存在,好像出现了幻觉。
多说一句,我在出门的时候,经常走到楼下了,一直想不起来门是不是关上了,一直有幻觉自己没有锁上门!你有没有发生过这种事情。
事务隔离级别:
read uncommitted 不能杜绝脏读,不能杜绝重复读,不能杜绝幻读
read committed(oracle默认级别) 可以杜绝脏读,不能杜绝不可重复读,不能杜绝幻读
repeatable read(sql默认级别)可以杜绝脏读,可以杜绝不可重复读,不能杜绝幻读
serializable 串行化,可以杜绝(脏读,不可重复读,幻读)效率最差,性能最差,安全性最好
--查看事务隔离级别
select @@transaction_isolation
--设置事务隔离级别
set [session|global] transaction level [read uncommitted | read committed | repeatable read | serializable]
select @@transaction_isolation;
--设置read uncommitted事务级别
set session transaction isolation level read uncommitted ;
--设置read committed事务级别
set session transaction isolation level read committed;
--设置repeatable read事务级别
set session transaction isolation level repeatable read ;
--设置serializable事务模式
set session transaction isolation level serializable;