mysql - 如何锁定 MySQL 表以防止更新,直到执行两个单独的 select 语句

标签 mysql sql database locking innodb

我需要在两个 MySQL/InnoDB 表上锁定并执行两个 select 语句。两个表都有相关的行名称 updateId

SELECT ..., updateId FROM Table1 WHERE ...
SELECT ..., updateId FROM Table2 WHERE ...

我需要防止更新、插入或删除(对表的任何修改),直到两个 SELECT 语句都执行为止。 基本上我想防止在两个语句之间对 updateId 行进行任何更改。

我正在查看 SELECT ... FOR SHARESELECT ... FOR UPDATE 但我只是有点不清楚它是如何工作的。

最佳答案

其他进程可以!!写入,但第一个进程处理交易中当时的数据。

这是一个交易示例

MariaDB [trans]> select * from table1;
+----+-------------+
| id | field1      |
+----+-------------+
|  1 | table 1 -1  |
|  2 | table 1 - 2 |
+----+-------------+
2 rows in set (0.001 sec)

MariaDB [trans]> start transaction;
Query OK, 0 rows affected (0.000 sec)

MariaDB [trans]> select * from table1;
+----+-------------+
| id | field1      |
+----+-------------+
|  1 | table 1 -1  |
|  2 | table 1 - 2 |
+----+-------------+
2 rows in set (0.000 sec)


                    CLIENT 2:
                    MariaDB [trans]> update table1 set field1 = 'new value' where id = 1;
                    Query OK, 1 row affected (0.003 sec)
                    Rows matched: 1  Changed: 1  Warnings: 0

                    MariaDB [trans]> 






MariaDB [trans]> select * from table1;
+----+-------------+
| id | field1      |
+----+-------------+
|  1 | table 1 -1  |
|  2 | table 1 - 2 |
+----+-------------+
2 rows in set (0.001 sec)

MariaDB [trans]> commit;
Query OK, 0 rows affected (0.001 sec)

MariaDB [trans]> select * from table1;
+----+-------------+
| id | field1      |
+----+-------------+
|  1 | new value   |
|  2 | table 1 - 2 |
+----+-------------+
2 rows in set (0.001 sec)

MariaDB [trans]> 

关于mysql - 如何锁定 MySQL 表以防止更新,直到执行两个单独的 select 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55415387/

相关文章:

mysql 在值中展开一个字段循环并创建一个新列,其标题与这些值相关联

php - 自动生成从 001 开始的序列号(仅适用于 3 位数字)- PHP/MYSQL

php - DataTables columnFilter number-range 过滤

sql - select 语句可以包含嵌套结果集吗?

php - 我需要防止输入重复的数据。我基于以下几点;名字、姓氏和电话

sql - 如何使用 Oracle TO_CHAR() 将数字转换为不带小数点的字符

database - 使用 MVC 3 和 Razor 在 TreeView 中填充部分树(一次一层)

database - 使用 ColdFusion 在 Excel 列中进行文本换行或自动宽度调整

java - 查询数据库中的对象列表,以便从该列表创建对象 : proper way to do

mysql - 如何一次将批量数据插入数据库?