事务
什么是事务?
事务就是将一组sql语句放到同一批次去执行,如果一个sql语句出错,则该批次内所有sql语句取消执行。
事务的特点:
一个事务中如果有一个数据库操作失败,那么整个事务的所有数据库操作都会失败,数据库数据就会回滚到事务开始之前的状态。
事务的限制
mysql中只有InnoDB和BDB的数据库表支持事务
事务的ACID原则
原子性,一致性,隔离性,持久性。
原子性:
一致性:
指的是事务开始之前,以及事务结束之后,事务的完整性约束没有被破坏。(事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。主要是指数据处于一种语义上的有意义且正确的状态,保证在一个事务中的多次操作的数据中间状态对其他事务不可见的。主要是通过原子性、隔离性、持久性保证数据库状态的一致性。)
隔离性:
事务的执行是互不干扰的,一个事务执行时,不可能看到其它事务运行的某个时刻的数据。(:主要是指多个事务之间相互独立,互不干扰。事务隔离分为不同级别,包括未提交读(Read uncommitted)、已提交读(read committed)、可重复读(repeatable read)和串行化(Serializable)。主要依赖的是MVCC或者锁来实现的隔离性。) 并发执行的各个事务互不干扰
持久性:
指的是事务在成功执行完成之后,对数据库的操作更改会持久地保存在数据库中,并不会回滚。指一个事务一旦成功提交,它对数据库中的数据的改变是永久性的。接下来的其它操作或故障不应该对其执行结果有任何影响。主要依赖的是redo log来保证持久性
Acid大佬总结
mysql实现事务的步骤:
1set autocommit =0 关闭Mysql自动提交
#2:开启事务(可选)
start transaction;
#2举例↓:编写事务中的sql语句(insert、update、delete)
#这里实现一下"李二给王五转账"的事务过程
update t_account set balance = 50 where vname = "李二";
update t_account set balance = 130 where vname = "王五";
#3:结束事务
#3.1
commit; #提交事务
# 3.2rollback; #回滚事务:就是事务不执行,回滚到事务执行前的状态
4set autocommit = 1 开启MySQL自动提交
事物的隔离性:
实现事务隔离性的方式-锁
MySQL中的锁
事务的隔离级别
事务并发问题:
事务的隔离级别详解:
1. READ_UNCOMMITTED 读未提交
2. READ_COMMITTED 读提交(不可重复读)