mysql 事务管理

事务管理:逻辑上的一组操作,要么同时完成,要么同时失败。

mysql>start transaction;//声明一个事务的开始
//从a的账户向b的账户转入100元
mysql>update account set money=money+100 where name='a';//步骤1,向a的账户存入100,
mysql>update account set money=money-100 where name='b';//步骤2,从b的账户减去100,
mysql>rollback;//回滚事务,前面已经执行完成的步骤将会全部失效,用于取消事务
(必须在commit语句执行之前才会有效,在事务执行过程中意外中断会默认执行事务回滚语句) mysql>commit;//提交事务,如果以上两个步骤都成功,则将最终结果提交到数据库并产生效果,
        //否则只要以上两个步骤任意一个失败则提交失败,最终不会对数据库产生影响,

 事务的四大特性:(数据库自带的功能,除隔离性之外,都不需要我们自己维护)

1,原子性(Atomicity):事务是一组不可分割的单位,要么一起成功,要么一起失败;

2,一致性(Consistency):事务前后的数据完整性应该保持一致,(满足所有约束);

3,持久性(Durabilty):事务一旦被提交,就能对数据库数据永久改变,不会应为中途中断而被影响;

4,隔离性(Isolation):多个用户同时操作事务,事务之间互不干扰;

四大隔离级别:(

1,脏读是指,在数据库不做任何隔离的情况下,事务1对数据进行修改后又进行了回滚(相当于事务1最终未对数据进行任何修改),

而事务2在事务1修改前、修改后和回滚后分别对数据进行了3次读取,其中只有第二次读取到了数据的变化。

2,不可重复读是指,在数据库只做了隔离1或者隔离2的情况下,事务1对数据进行了修改并最终做了提交,而事务2在事务1修改前后分别对数据进行了读取,

而第一次读取到的数据在后面是不会再次重复读取到的。)

1,read uncommitted; 不做任何隔离(安全性最低,性能最高)

2,read committed;   只能防止脏读

3,repeatable read;   可以防止脏读,不可重复读,但是不能防止虚读(幻读)/系统默认的级别/

4,serializable;    数据库运行串行化,所有问题都不会产生,但是性能低

安全性越高,则性能越低,系统默认的隔离级别最好;

---修改数据库的隔离级别---

set tx_isolation='read-uncommitted';//当开启该隔离级别时,事务管理将失效(出现脏读现象)

set tx_isolation='read-committed';

set tx_isolation='repeatable-read';

set tx_isolation='serializable';

---查询数据库当前的隔离级别---

select @@tx_isolation;

原文地址:https://www.cnblogs.com/Jfh389987366/p/6934817.html