mysql中事务的四大特性
--- 事务(Transaction):把多条DML语句捆绑在一起,要么同时执行成功要么同时执行失败
事务的执行sql:
commit --提交
rollback --回滚
savepoint --保存点,便于回滚到某一位置,直接回滚是从头开始
事务的实现逻辑:
1、开启事务机制
2、执行DML语句
3、提交事务或回滚(事务提交后将会永久修改硬盘文件内的数据 -- 结束 /// 事务回滚后不会修改硬盘文件上的数据 -- 结束)
例:微信转账,好友a给好友b转账100元
1 2 3 | 实际就是执行两条update的语句 1 、update t_user set 账户余额 = 账户余额 - 1000 where user = a; 2 、update t_user set 账户余额 = 账户余额 + 1000 where user = b;<br>以上两条DML语句就是一个事务,开启事务机制,两条语句开始执行,要么同时成功要么同时失败。 |
事务的四大特性:ACID
A:原子性 --事务是最小的工作单元,不可再分
C:一致性 --所有执行的DML语句必须同时失败或成功
I: 隔离性 --事务和事务之间必须有隔离
D:持久性 --最终数据必须持久化到硬盘文件中,事务才算成功结束
mysql当中事务是自动提交的
演示:
一条insert语句执行后,数据会自动写入到表中来
关闭自动提交,演示事务实现逻辑的完整过程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | mysql> start transaction; - - 关闭事务自动提交机制 Query OK, 0 rows affected ( 0.00 sec) mysql> insert into t_user(username)values( 'test' ); - - 插入数据 Query OK, 1 row affected ( 0.00 sec) mysql> select * from t_user; - - 查看表内数据 + - - - - + - - - - - - - - - - + | id | username | + - - - - + - - - - - - - - - - + | 1 | ls | | 2 | sz | | 9 | yanshi | | 10 | test | + - - - - + - - - - - - - - - - + 4 rows in set ( 0.00 sec) mysql> rollback; - - 回滚 Query OK, 0 rows affected ( 0.00 sec) mysql> select * from t_user; - - 再次查看表内数据,此时表内 id = 10 的数据已经消失 + - - - - + - - - - - - - - - - + | id | username | + - - - - + - - - - - - - - - - + | 1 | ls | | 2 | sz | | 9 | yanshi | + - - - - + - - - - - - - - - - + 3 rows in set ( 0.00 sec)<br><br class = "Apple-interchange-newline" >几条语句下来,就验证了事务的实现逻辑,如果没有commit动作,事务结束后,是不会修改到硬盘内的数据 |
事务的隔离性也分为四大隔离等级
第一级别:读取未提交数据(read uncommitted)
释:a关闭自动提交后,处于第一级别的隔离性,在执行DML语句后,未做commit动作,b查看这张表是能查看到未提交前a所执行的DML语句
缺点:存在脏数据,数据及其不稳定
第二级别:读取已提交数据(read committed)
释:a关闭自动提交后,处于第二级别的隔离性,在执行DML语句后,做完commit动作,b看到的是commit后的所有表内数据
缺点:不能重复读表内原始的数据,只能读commit后变更的数据
第三级别:可重复读(repeatable read)
释:commit后的数据不能读取到,只能读事务开启时的数据
第四级别:序列化读
释:排队读取,当a在读时,b就得一直等,直到a停止读取后,b才能读取
缺点:效率低,所有的事务都得进行排队
mysql当中默认的隔离级别是第三级别,而oracle中默认的隔离级别是第二级别
1 2 3 4 5 6 7 | mysql> select @@ global .tx_isolation; - - 查看mysql的隔离级别 + - - - - - - - - - - - - - - - - - - - - - - - + | @@ global .tx_isolation | + - - - - - - - - - - - - - - - - - - - - - - - + | REPEATABLE - READ | + - - - - - - - - - - - - - - - - - - - - - - - + 1 row in set , 1 warning ( 0.00 sec) |
有啥个人误解,望评论区指出,谢谢!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix