SELECT 语句中的 for update (以及 lock in share mode

news/2024/7/4 1:46:27
SELECT 语句中的 for update (以及 lock in share mode) 的用法试验。
这个语句限制在事务表的其他连接上进行UPDATE或者DELETE操作。
连接1命名为A。
连接2命名为B。
有几个先决条件:
1、当autocommit 系统变量值为off 或者为0 的时候起作用。
2、并且表的引擎是支持事务的,比如INNODB。
3、也可以不管autocommit的执,手动在事务里执行操作,这个时候可能要begin或者start transaction语句了。
4、不要在锁定事务在innodb_lock_wait_timeout规定以外的时间完成。
此时在A连接执行:
mysql> use t_girl;
Database changed
mysql> create table t (id int not null auto_increment primary key, cstr char(40) not null) engine innodb;
Query OK, 0 rows affected (0.00 sec)

mysql> show tables;
+
------------------+

| Tables_in_t_girl |
+
------------------+

| t |
+
------------------+

1 row in set (0.00 sec)

mysql> insert into t(cstr) values('This is huahua'),('This is not huahua'),('Huahua is a dog,not a person\'s name
');
Query OK, 3 rows affected (0.02 sec)
Records: 3 Duplicates: 0 Warnings: 0

mysql> select * from t;
+----+-------------------------------------+
| id | cstr |
+----+-------------------------------------+
| 1 | This is huahua |
| 2 | This is not huahua |
| 3 | Huahua is a dog,not a person'
s name |
+
----+-------------------------------------+

3 rows in set (0.00 sec)

mysql> begin;
Query OK, 0 rows affected (0.00 sec)

mysql> select * from t where id = 2 for update;
+
----+--------------------+

| id | cstr |
+
----+--------------------+

| 2 | This is not huahua |
+
----+--------------------+

1 row in set (0.00 sec)
过了一段时间后执行:
mysql> commit;
Query OK, 0 rows affected (0.00 sec)
此时在B连接执行:
mysql> update t set cstr = 'I know huahua is a person' where id =2;
Query OK, 1 row affected, 0 warning (48.91 sec)
Rows matched: 1 Changed: 1 Warnings: 0
这个UPDATE会一直等待A连接执行commit或者rollback才会生效。

mysql> select * from t where id =2;
+
----+-----------------------------------------+

| id | cstr |
+
----+-----------------------------------------+

| 2 | I know huahua is a person |
+
----+-----------------------------------------+

1 row in set (0.00 sec)
此时在A连接上执行:
mysql> select * from t where id = 2;
+
----+-----------------------------------------+

| id | cstr |
+
----+-----------------------------------------+

| 2 | I know huahua is a person |
+
----+-----------------------------------------+

1 row in set (0.00 sec)


LOCK IN SHARE MODEFOR UPDATE 是一样的原理。


http://www.niftyadmin.cn/n/2108699.html

相关文章

Android 在Application中跳转到Activity的异常处理

项目需求:在Application中判断用户是否登录,如果登录则跳转到主页,如果未登录则跳转到登录页面。 一般通过Intent跳转到Activity的方法: Intent intent new Intent(this, MainActivity.class); startActivity(intent); 在Appl…

工作笔记 7.21-7.25

1. cstring 在 unicode 下转 char* 仅仅须要在后面加一个 ""; 就能够了!!!!2. f5 和执行文件夹是不一样的。3. 有问题查看 log 日志。并多打一些 log 出来,方便解决这个问题。4. Inno 加文件要写在iss中。。…

实训C++语言设计——稀疏矩阵SparseMatrix

平台:VC 2005 测试通过!.vcproj这是使用应用程序向导生成的 VC 项目的主项目文件。 它包含生成该文件的 Visual C 的版本信息,以及有关使用应用程序向导选择的平台、配置和项目功能的信息。StdAfx.h, StdAfx.cpp这些文件用于生成名为 twod.pc…

基础篇——Handler异步回调机制

写代码的四点: 1.明确需求。要做什么? 2.分析思路。要怎么做?(1,2,3……) 3.确定步骤。每一个思路要用到哪些语句、方法和对象。 4.代码实现。用具体的语言代码将思路实现出来。 学习新技术的四点: 1.该技…

AMP:Google 新技术能让网页瞬间加载完毕

作为一家活在 Web 世界的公司,Google 对提升网页性能一直是不遗余力。今天,为了让用户能够更快地浏览网页,Google 联合 8 家科技公司以及近 30 家新闻机构一起发布了一个名为移动页面加速(Accelerated Mobile Pages)的…

HTML5中类jQuery选择器querySelector的高级使用 document.querySelectorAll.bind(document);

基本用法 querySelector 该方法返回满足条件的单个元素。按照深度优先和先序遍历的原则使用参数提供的CSS选择器在DOM进行查找,返回第一个满足条件的元素。 ----> querySelector得到一个DOM var element document.querySelector(#container);//返回id为conta…

不能正常关机的处理办法

问:Win98不能正常关机是什么原因,如何处理?安装WinXP后不能正常关机,按下电源开关也不能关机而又重新启动系统,是什么原因?答:首先谈谈Windows系统自动关机的条件。在Win98及更高版本的系统中都…

AndroidStudio的debug功能详解

转载仅供本人存档及后续研究使用,请尊重原创。 转载自:https://blog.csdn.net/u013952370/article/details/52131007 运行debug模式 1. 进入debug - 点击图中红色圆圈圈起的左边绿色按钮,运行app的debug模式,快捷键ShiftF9 - 点…