关于事务
何为事务?
1.事务是指事务开始到事务结束之间的一组sql语句的操作单元,并且是组内所有sql语句共同完成的业务逻辑。
2.要想使用事务,首先关闭系统自动提交功能(因为系统默认的为自动提交),等待所有在sql语句组中的语句都执行完毕后,再进行手动提交。
关闭系统内自动提交的方式:set autocommit=0;
打开系统自动提交的方式:set autocommit=1;
3..要想事务成功提交,必须是该sql语句组中所有的sql语句都实现,否则该事务提交失败,需手动回滚rollback使数据库回到初识状态。
写到这里,我昨天在项目中遇到一个误区,在这儿我用实例来解释一下:
设计一个事务,同时在student表和teacher表中各添加一条记录?
student表结构:
teacher表结构:
Start transaction; --开始一个事务
Insert into student values
(‘1315925010’,’刘德华’,’男’,’2016-01-01’,’汉’,’中国’,’M02’,’2016-01-01’); --该语句插入记录成功
Insert into teacher values
(‘T100’,’林志玲’,’2016-01-01’,’美女讲师’); --该语句插入记录失败(插入的字段值列表不够)
Commit; --手动提交
总结:上面事务虽然执行了,也成功提交了,但是事务成功的前提是要么所有的sql语句都执行,要么都不执行;反过来在观察上面的事务,查看student表的数据时,发现数据插入成功,而查看teacher表数据时却未插入成功,这就破环了事务的原子性,所以该事务是不成立的。
解决方案:只要sql组中任何一条语句未执行成功,我们就不应该提交该事务,而是将数据库回滚或将开始一个新的事务。
Start transaction; --开始一个事务
Insert into student values
(‘1315925010’,’刘德华’,’男’,’2016-01-01’,’汉’,’中国’,’M02’,’2016-01-01’); --该语句插入记录成功
Insert into teacher values
(‘T100’,’林志玲’,’2016-01-01’,’美女讲师’); --该语句插入记录失败(插入的字段值列表不够)
rollback; --记住:只要事务中的任意一条sql语句未执行成功,则需手动回滚,不该提交;否则破环事务的原子性。
事务的四大特性:(ACID)
1.原子性:事务sql组中语句要么都执行成功,要么都不执行
2.隔离性:事务之间互不影响
3.一致性:事务执行前后,数据是一致的
4.持久性:事务一旦提交,则永久对数据库产生影响
事务关键字:
打开事务:start transaction;
回滚事务:rollback;
提交事务:commit;
设置数据库提交方式为非自动的:set autocommit=0;设置数据库提交方式为自动的:set autocommit=1;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?