关于事务
何为事务?
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;
- 分享一个刷网页PV的python小脚本
- mysql完整备份时过滤掉某些库
- Jquery 结合Json控制Select下拉框
- ExtJs学习笔记(23)-ScriptTagProxy+XTemplate+WCF跨域取数据
- Centos7.2下Jumpserver V4.0环境安装部署记录
- 利用JQuery实现更简单的Ajax跨域请求
- 运维工作中sed常规操作命令梳理
- linux下安装php的imagick扩展模块(附php升级脚本)
- 用JS + WCF打造轻量级WebPart
- Android之assets资源
- ExtJs学习笔记(24)-Drag/Drop拖动功能
- 人工智能尚处探索阶段,为何我们对此异常焦虑
- ExtJs学习笔记(22)-XTemplate + WCF 打造无刷新数据分页
- 同步服务器系统时间操作记录
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Kubernetes Dashboard 与 LDAP 的集成
- Grafana Loki 简明教程
- 深度学习中7种最优化算法的可视化与理解
- 【基础详解】手磕实现 CNN卷积神经网络!
- 直播间源码android音视频开发
- 批量转化字符编码
- JAR项目部署
- java基础:枚举(你木有见过的船新版本)
- elasticSearch学习(九)
- Linux工具---iptraf 实时地监视网卡流量
- Linux工具---ipcalc简单的IP地址计算器
- 七、玩转Git三剑客-使用GitHub进行团队协作
- 关于mysql的join
- 微信公众号接入智能聊天机器人
- SAP UI5 Diagnostics工具里一个使用面向切片编程(AOP)的一个例子