特性:
- Atomicity原子性:也称‘全有或全无规则’,事务要么完整发生,要么根本不发生,不会部分发生,分为中止和提交两个操作
- consistency一致性:事务在执行前和执行后数据的不变和正确
- Isolation隔离性:两个同的事务不会互相影响,是完全独立的
- durability持久性:事务在提交后的操作对数据库的影响是永远存在的
隔离级别(事务隔离是依靠锁来实现的) - 读未提交:
- 读已提交
- 可重复读(mysql的默认级别)
- 串行化
四种隔离级别会产生的问题
**脏读:**读未提交,读到其它程序还没有提交的数据
**不可重复读:**同一个事务内不同时刻读到的数据可能是不一样的,可能会收到其它事务影响,比如当前事务1还没有结束,其它事务也访问了这个数据并更改了,事务1再次读取这个数据时发现前后读到的值不一样
**幻读:**其它事务提前插入了相同的数据,当前程序在执行时以为没有更改过
update时加锁过程中要分两种情况:
如果更新的字段不为主键,mysql无法直接定位到这行数据,则会为这张表中所有的行加锁,之后一遍遍过滤发现不满足的就将锁释放,最后只留下符合的行,这其中加锁释放锁的过程对性能影响极大
解决不可重复读使用mvcc。即在每条数据上添加版本字段,记为row trx_id用来标记产生事务的id,在事务开始的时候向事务系统申请