原子性:原子性是指事物包含的所有操作要么全部成功,要么全部失败回滚。
一致性:一致性是指事物必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说事务执行之前和执行之后都必须处于一致性状态。
隔离性:隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个,用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性:持久性是指一个事务一旦被提交了,那么对数据库的数据的改变就是永久性的,即使是在数据库系统遇到故障的情况下也不会丢失提交的事务的操作,不考虑事务的隔离性,会发生的几种情况。
脏读:脏读是指一个事务处理过程里读取了另一个未提交的事务中的数据。
不可重复读:不可重复读是指在对于数据库中的某个数据,一个事务范围内多次查询却返回了不同的数据值,这是由于在查询间隔,被另一个事务修改并提交了。
虚读(幻读):幻读是事务非独立执行时发生的一种现象。例如事务T1对一个表中的所有的行的某个数据做了,从“1”修改为“2”的操作,这是事务T2有对这个表中插入了一行数据项,而这个数据项的数值,
还是为“1”并且提交数据库。而操作事务T1的用户如果再查看刚刚修改的数据,会发现还有一行,没有修改,其实这行是从事务T2中添加的,就好像产生幻觉一样,这就是发生了幻读。
MYSQL数据库为我们提供的四种隔离级别
1、Serializable (串行化):最严格的级别,事务串行执行,资源消耗最大。
2、REPEATABLE READ(重复读) :保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了“脏读取”和“不可重复读取”的情况,但不能避免“幻读”,但是带来了更多的性能损失。
3、READ COMMITTED (提交读):大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了“脏读取”,但不能避免“幻读”和“不可重复读取”。该级别适用于大多数系统。
4、Read Uncommitted(未提交读) :事务中的修改,即使没有提交,其他事务也可以看得到,会导致“脏读”、“幻读”和“不可重复读取”。
mysql操作事务
默认开启事务 把SQL语句当成最小单元处理
所有操作都是原子性 insert delete
使用事务: mysql表引擎设置成innodb
开启事务
SQL1 SQL2 SQL3
提交 COMMIT
回滚 ROLLBACK
应用场景 : 银行转账
A-》B 转200块钱
id 用户名 钱
1 A 800
2 B 2200
示例 开启: BEGIN
$sql1 = “UPDATE xxx SET money = money-200 WHERE id = 1”;
$sql2 = “UPDATE xxx SET money = money+200 WHERE id = 2”;
提交 COMMIT
回滚 ROLLBACK