一键自助建站,山东振国网站建设,吉林市教做网站,网站制作xiu021MySQL—— 基础语法大全及操作演示#xff08;事务#xff09; 六、事务6.1 事务简介6.2 事务操作6.2.1 未控制事务6.2.2 控制事务一6.2.3 控制事务二 6.3 事务四大特性6.4 并发事务问题6.5 事务隔离级别 MySQL— 基础语法大全及操作演示#xff01;#xff01;#xff01… MySQL—— 基础语法大全及操作演示事务 六、事务6.1 事务简介6.2 事务操作6.2.1 未控制事务6.2.2 控制事务一6.2.3 控制事务二 6.3 事务四大特性6.4 并发事务问题6.5 事务隔离级别 MySQL— 基础语法大全及操作演示上https://blog.csdn.net/weixin_43412762/article/details/132051493 MySQL— 基础语法大全及操作演示中https://blog.csdn.net/weixin_43412762/article/details/132261256 MySQL— 基础语法大全及操作演示下https://blog.csdn.net/weixin_43412762/article/details/132548235 六、事务
6.1 事务简介
事务 是一组操作的集合它是一个不可分割的工作单位事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求即这些操作要么同时成功要么同时失败。 就比如: 张三给李四转账1000块钱张三银行账户的钱减少1000而李四银行账户的钱要增加1000。 这一组操作就必须在一个事务的范围内要么都成功要么都失败。 正常情况: 转账这个操作, 需要分为以下这么三步来完成 , 三步完成之后, 张三减少1000, 而李四增加1000, 转账成功。 异常情况: 转账这个操作, 也是分为以下这么三步来完成 , 在执行第三步是报错了, 这样就导致张三减少1000块钱, 而李四的金额没变, 这样就造成了数据的不一致, 就出现问题了。 为了解决上述的问题就需要通过数据的事务来完成我们只需要在业务逻辑执行之前开启事务执行完毕后提交事务。如果执行过程中报错则回滚事务把数据恢复到事务开始之前的状态。 注意 默认MySQL的事务是自动提交的也就是说当执行完一条DML语句时MySQL会立即隐式的提交事务。 6.2 事务操作
数据准备
drop table if exists account;create table account(id int primary key AUTO_INCREMENT comment ID,name varchar(10) comment 姓名,money double(10,2) comment 余额
) comment 账户表;insert into account(name, money) VALUES (张三,2000), (李四,2000);6.2.1 未控制事务
1). 测试正常情况
-- 1. 查询张三余额
select * from account where name 张三;
-- 2. 张三的余额减少1000
update account set money money - 1000 where name 张三;
-- 3. 李四的余额增加1000
update account set money money 1000 where name 李四;测试完毕之后检查数据的状态, 可以看到数据操作前后是一致的。 2). 测试异常情况
-- 1. 查询张三余额
select * from account where name 张三;
-- 2. 张三的余额减少1000
update account set money money - 1000 where name 张三;
程序抛出异常....
-- 3. 李四的余额增加1000
update account set money money 1000 where name 李四;我们把数据都恢复到2000 然后再次一次性执行上述的SQL语句(出错了… 这句话不符合SQL语法,执行就会报错)检查最终的数据情况, 发现数据在操作前后不一致了。
6.2.2 控制事务一
⭐️ 1). 查看/设置事务提交方式
select autocommit ;
set autocommit 0 ; -- 设置为手动提交业务完成后也执行 commit 指令.⭐️ 2). 提交事务
commit;⭐️ 3). 回滚事务
rollback;注意上述的这种方式我们是修改了事务的自动提交行为, 把默认的自动提交修改为了手动提交, 此时我们执行的DML语句都不会提交, 需要手动的执行 commit 进行提交。 6.2.3 控制事务二
⭐️ 1). 开启事务
start transaction 或 begin ;⭐️ 2). 提交事务
commit;⭐️ 3). 回滚事务
rollback;6.3 事务四大特性
原子性Atomicity事务是不可分割的最小操作单元要么全部成功要么全部失败。一致性Consistency事务完成时必须使所有的数据都保持一致状态。隔离性Isolation数据库系统提供的隔离机制保证事务在不受外部并发操作影响的独立环境下运行。持久性Durability事务一旦提交或回滚它对数据库中的数据的改变就是永久的。
上述就是事务的四大特性简称 ACID。
6.4 并发事务问题
⭐️ 1). 赃读一个事务读到另外一个事务还没有提交的数据。 比如A读取到了B未提交的数据。 read committed 可以解决脏读⭐️ 2). 不可重复读一个事务先后读取同一条记录但两次读取的数据不同称之为不可重复读。 事务A两次读取同一条记录但是读取到的数据却是不一样的。 repeatable read 可以解决不可重复读⭐️ 3). 幻读一个事务按照条件查询数据时没有对应的数据行但是在插入数据时又发现这行数据已经存在好像出现了 “幻影”。
6.5 事务隔离级别
为了解决并发事务所引发的问题在数据库中引入了事务隔离级别。主要有以下几种 从上到下隔离级别越来越高但性能越来越差。 ⭐️ 1). 查看事务隔离级别
select transaction_isolation;⭐️ 2). 设置事务隔离级别
set [ session | global ] transaction isolation level { read uncommitted | read committed | repeatable read | serializable }注意事务隔离级别越高数据越安全但是性能越低。