模板网站 优帮云,有没有专门做毕业设计的网站,外贸网站建设ppt模板下载,校车网站建设一、事务简介 事务是一组操作的集合#xff0c;它是一个不可分割的工作单位#xff0c;事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求#xff0c;即这些操作要么同时成功#xff0c;要么同时失败。
二、事务操作
1、操作1 查看/设置事务提交方式 select a…一、事务简介 事务是一组操作的集合它是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。
二、事务操作
1、操作1 查看/设置事务提交方式 select autocommit; 输出为1 --自动提交0--手动提交 set autocommit0; 提交事务 commit; 回滚事务 rollback;
2、操作2 开启事务 start transaction 或 begin; 提交事务 commit; 回滚事务 rollback;
三、事务四大特性 原子性Atomicity事务是不可分割的最小操作单元要么全部成功要么全部失败 一致性Consistency事务完成时必须使所有的数据都保持一致状态。 隔离性Isolation数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。 持久性Durability事务一旦提交或回滚它对数据库中的数据改变就是永久的。
四、并发事务问题 五、事务隔离等级 -- 查看事务隔离级别 select transaction_isolation; -- 设置事务隔离级别 set [session | global ] transaction isolation level [ read uncommitted | read committed | repeatavle read | serializable ] 注意事务的隔离级别越高性能越低。
六、案例 打开两个命令符窗口 登录数据库 mysql -u root -p切换到练习数据库use pra; 开启事务 start transaction 先查询一下表中数据 select * from account; 在第一个命令符窗口中设置事务隔离级别为read uncommitted——set session transaction isolation level read uncommitted; 然后在第二个命令符窗口中输入命令update account set money money - 1000 where name 张三; 因为目前是开启的事务模式所以不提交数据库是不会进行相关操作但是在第一个命令符窗口中执行select * from account; 会发现account表中的数据已经被修改这就是脏读现象。 若在第一个命令符窗口中执行set session transaction isolation level read committed;即设置事务隔离级别为read committed重复以上操作则不会出现脏读现象。 设置read committed解决脏读问题后但是不能解决不可重复读现象。开启事务 start transaction(两个窗口)第一个窗口执行 select * from account; 然后第二窗口执行 update account set money money 1000 where name 张三;但是不执行提交然后在第一个窗口再次执行 select * from account;发现两次查询结果一样然后第二个窗口执行提交第一个窗口执行查询结果发现变化这就是不可重复读。 将事务隔离级别设置为repeatable read重复上述操作可实现重复读取。 然而repeatable read 隔离级别无法解决幻读现象开启事务 start transaction(两个窗口)第一个窗口执行select * from account where id 3;返回空值然后在第二个窗口执行 insert into account (id, name, money) values (3, 王五, 2000);提交。再用第一个窗口查询同样返回空值然后再用第一个窗口执行插入命令 insert into account (id, name, money) values (3, 大刀王五, 2000); 返回error报错account中主键3重复那么再次查询主键为3的数据返回依然没有值。这种现象就是幻读。 幻读现象可以使用serializable串行化隔离级别解决。