事务管理:逻辑上的一组操作,要么同时完成,要么同时失败。
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;