第一
第二
第三
不能出现传递依赖,也就是a依赖b,b依赖主键c
原子性
一致性
一致性和原子性联系紧密,一个人给另一个人转账,如果扣除成功,要么另一个账户到账,要么退回,不能凭空消失,可以说要平账,甚至可以引申为能量守恒。
隔离性
持续性
指一个事务一旦提交,对数据库的改变是永久性了。 MySQL的事务隔离级别
串行化>可重复读>读已提交>读未提交
串行化
可重复读(mysql默认)
读已提交(spring默认)
一个事务使用一条数据时,其他事务只能读取到数据被使用前的值,可以避免脏读,但还有不可重复读问题
读未提交(Oracle没有这个)
所有事务可以看到其他未提交事务的执行结果,有脏读问题
- 幻读:一个事务根据读取的数据执行的结果和预期的不一致,可能因为被其他线程执行的结果干扰了。
- 不可重复读:事务对一个数据多次读取的结果不一样,可能被其他事务干扰了。
- 脏读:一个事务还没提交的结果被其他事务读取了。 常见的存储引擎MyISAM 级锁
- 全局锁
锁住是所有数据库都变成只读状态
- 问题
在主库上备份,在备份期间无法更新,业务停摆
在从库上备份,无法执行主库同步过来的二进制文件,会导致主从延迟
- 解决
在备份时加上参数—single-transaction完成不加锁的数据一致性备份
表级锁
表锁
读锁
写锁
元数据锁(MDL)
在表上有活动事务时自动加锁,无法对元数据写入。由系统自动控制,在访问一张表时自动加上。
MyISAM和InnoDB的区别?
- InnoDB行级锁,支持表级锁;MyISAM支持表级锁
- InnoDB支持事务、外键、聚簇索引、MVCC