mysql 开发基础系列21 事务控制和锁定语句(下)
1. 隐含的执行unlock tables
如果在锁表期间,用start transaction命令来开始一个新事务,会造成一个隐含的unlock tables 被执行,如下所示:
|
会话1 |
会话2 |
|
SELECT * FROM country WHERE country='德国'; 记录为空 |
SELECT * FROM country WHERE country='德国'; 记录为空 |
|
-- 对country表进行加 写锁 LOCK TABLE country WRITE; |
|
|
-- 查询 整个表读取被阻塞 SELECT * FROM country WHERE country='德国'; |
|
|
-- 插入一条记录 INSERT INTO country(country, last_update) VALUES('德国',NOW()); 共 1 行受到影响 country_id country last_update 2 中国 2018-07-03 18:06:45 7 德国 2018-07-12 17:22:08 |
查询等待 |
|
-- 开始一个新事务 START TRANSACTION; |
|
|
会话1开始一个新事务时,表锁被释放,可以查询: SELECT * FROM country; country_id country last_update 2 中国 2018-07-03 18:06:45 7 德国 2018-07-12 17:22:08 |
在同一个事务中,最好不要操作不同存储引擎的表, 因为只有commit 和rollback 只能对事务类型的表进行提交和回滚。通常 提交的事务记录会到二进制的日志中, 但如果一个事务中包含非事务类型的表,那么回滚操作也会被记录到二进制日志中,以确保非事务类型表的更新可以被复制到从slave数据库中。
2. savepoint
在事务中可以通过定义 savepoint,指定回滚事务的一个部分,但是不能提交提交事务的一个部分, 对于复杂的应用,可以定义多个不同的savepoint 来适应不同的条件,回滚不同的savepoint。如果定义了相同名字的savepoint,则后面定义的savepoint会覆盖之前的定义。对于不再需要使用的savepoint,可以通过release savepoint 来删除savepoint。
下面举例回滚事务的一个部分,通过定义savepoint来指定需要回滚的事务的位置。
|
会话1 |
会话2 |
|
SELECT * FROM country WHERE country='德国'; 结果为空 |
SELECT * FROM country WHERE country='德国'; 结果为空 |
|
-- 启动一个事务 插入一条记录 START TRANSACTION ; INSERT INTO country(country, last_update) VALUES('德国',NOW()); |
|
|
-- 可以查询到刚插入的记录 SELECT * FROM country WHERE country='德国'; country_id country last_update 12 德国 2018-07-12 18:17:12 |
SELECT * FROM country WHERE country='德国'; 结果为空 |
|
-- 定义savepoint 名为testsavepoint SAVEPOINT savepoint_test; -- 继续插入一条记录, 此时事务还会提交 INSERT INTO country(country, last_update) VALUES('日本',NOW()); |
|
|
SELECT * FROM country WHERE country='德国' or country='日本' 结果为空 |
|
|
SELECT * FROM country WHERE country='德国' or country='日本' country_id country last_update 12 德国 2018-07-12 18:17:12 13 日本 2018-07-12 18:20:33 |
|
|
-- 回滚刚才的定义 ROLLBACK TO SAVEPOINT savepoint_test; |
|
|
SELECT * FROM country WHERE country='德国' OR country='日本' country_id country last_update 12 德国 2018-07-12 18:17:12 |
SELECT * FROM country WHERE country='德国' or country='日本' 结果为空 |
|
-- 提交事务 COMMIT; |
|
|
SELECT * FROM country WHERE country='德国' OR country='日本' country_id country last_update 12 德国 2018-07-12 18:17:12 |
SELECT * FROM country country_id country last_update 2 中国 2018-07-03 18:06:45 12 德国 2018-07-12 18:17:12 |
mysql 开发基础系列21 事务控制和锁定语句(下)的更多相关文章
- mysql 开发基础系列20 事务控制和锁定语句(上)
一.概述 在mysql 里不同存储引擎有不同的锁,默认情况下,表锁和行锁都是自动获得的,不需要额外的命令, 有的情况下,用户需要明确地进行锁表或者进行事务的控制,以便确保整个事务的完整性.这样就需要使 ...
- (1.3)mysql 事务控制和锁定语句
(1.3)mysql 事务控制和锁定语句 lock table 参考转载自:https://www.cnblogs.com/kerrycode/p/6991502.html 关键词:mysql loc ...
- mysql 开发基础系列12 选择合适的数据类型(上)
一. char 与varchar比较 在上图的最后一行的值只适用在"非严格模式",关于严格模式后面讲到.在“开发基础系列4“ 中讲到CHAR 列删除了尾部的空格.由于char是固定 ...
- mysql事务控制和锁定语句
MySQL 支持对 MyISAM 和 MEMORY 存储引擎的表进行表级锁定,对 BDB 存储引擎的表进行页级锁定,对 InnoDB 存储引擎的表进行行级锁定.默认情况下,表锁和行锁都是自动获得的,不 ...
- mysql 开发基础系列22 SQL Model
一.概述 与其它数据库不同,mysql 可以运行不同的sql model 下, sql model 定义了mysql应用支持的sql语法,数据校验等,这样更容易在不同的环境中使用mysql. sql ...
- mysql 开发基础系列18 存储过程和函数(下)
1. 光标的使用(游标) 在存储过程和函数中可以使用光标对结果集进行循环的处理,光标使用包括光标的声明,open ,fetch,close. 下面在存储过程中使用一个光标, 这个举例中光标里的逻辑不重 ...
- mysql 开发基础系列17 存储过程和函数(上)
一. 概述 存储过程和函数是事先经过编译并存储在数据库中的一段sql语句集合,可以简化应用开发人员的很多工作,减少数据在数据库与应用服务器之间的传输,提高数据处理效率是有好处的.存储过程和函数的区别在 ...
- mysql 开发基础系列14 字符集
字符集是一套文字符号及其编码,比较规则的集合.第一个字符集是ascll(american standard code for information interchange). 1. 选择合适的字 ...
- mysql 开发基础系列10 存储引擎 InnoDB 介绍
一. 概述: InnoDB存储引擎提供了具有提交,回滚,和崩溃恢复能力的事务安全,对比MYISAM 的存储引擎,InnoDB写的处理效率差一些并且会占用更多的磁盘空间以保留数据和索引.它的特点有如下: ...
随机推荐
- CRT-常用命令
1 目录操作 mkdir a ;(新建文件夹) mkdir -p a/b;(新建多及目录文件夹) Rmdir a (a只能是空目录) Rmdir -p a (a可以是多级目录) 2 文件操作 touc ...
- MongoDB学习记录(二) - MongoDB的"增查改删"操作之"增"
如果做插入文档操作的集合不存在,那么集合将被创建 db.collection.insertOne() insertOne为collection插入一条文档,如果文档的_id字段未指定,MongoDB会 ...
- SCUCTF2018web部分wp
[签到] Web部分的签到题,打开连接后F12审查元素 可以看到有被隐藏起来的JSFuck密码,解码运行后可得flag [计算器] 打开后界面如上图,要求简单来说就是回答20道数学题目,每道题最多3s ...
- Startls Back 引起的 win10升级之后的闪屏问题
win10 更新之后出现闪频问题. 有人说是和startls back 有关,需要卸载startls back, 但是进入安全模式下显示此 程序无法打开,无法卸载. 后来看到有人更新到startls ...
- 将 Desktop Central 与帮助台和 OS Deployer 集成
将 Desktop Central 与帮助台和 OS Deployer 集成 Desktop Central 可以与以下应用程序集成: 帮助台 OS Deployer Asset Explorer 与 ...
- PCL安装
本文是在Ubuntu16.04下安装PCL. 按照官网的教程,有两种方法可以安装: 1.直接安装预先编译好的二进制库文件 sudo add-apt-repository ppa:v-launchpad ...
- 移动端比较好用的滑动条 vue-slider-component
安装: npm install vue-slider-component <template> <div> <vue-slider v-model="value ...
- nodejs + 小程序云函数 生成小程序码
前言:这个东西坑死我了 业务需求要生成小程序码 然后我找了两天的资料 运行 生成一堆的乱码 死活就是不能生成 最后看了一遍博客 套用了一下 自己又简单的改了一下 nodejs 我是刚刚接触 有很多 ...
- 2019浙江省赛K zoj4110 Strings in the Pocket(manachar)
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=6012 题意 给你两个串,可以翻转a串的一个区间,问有多少对l,r使得翻转后的a ...
- Maven搭建SSH框架
工具:Eclipse(Maven管理工具)+Tomcat+Mysql. 1.新建一个Maven工程(maven-archetype-webapp). 打开File ——>new——>Mav ...