mysql - Mysql中的锁问题。我需要从我获取锁的表中读取数据

标签 mysql locking database

这是我的 table

test(tno,tname),
test2(t2no,tno,...);
test3(t3no,t2no,y,...);

我想在一个事务中将数据一一插入到这三个表中,以便在test1中生成的id将在test2中引用,依此类推。但我的问题是多个用户可以同时访问同一页面。那时,一个人的 ID 正在另一个人的记录中引用。我的数据库有 autocommit=1。为此,我首先使用锁定这些表来锁定。然后我尝试执行上述操作,以便用户将等到其前一个详细信息被存储。尽管它接受数据并将其保留在队列中。

它正在工作,但我没有在这些表中启用 auto_increment (我无法修改它们,因为我没有更改数据库的权限)。

我尝试过这种方式

lock table test write,test2 write,test3 write;
mysql> insert into test(tno) select max(tno) from test;
ERROR 1100 (HY000): Table 'test' was not locked with LOCK TABLES.

如果我静态地给出该 id 的值,它就可以正常工作。其他一切都工作正常。

最佳答案

如果这是将行插入表的唯一方式,您可以尝试首先选择新 ID max(tno),然后锁定表以进行 READ 然后插入新行。之后解锁READ

关于mysql - Mysql中的锁问题。我需要从我获取锁的表中读取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14440237/

相关文章:

Mysql通过缓冲降低CPU使用率

PHP MySQL - 将记录移动到另一个表,选择,插入,删除

sql - Oracle SQL,在包含另一列字符串的一列中搜索字符串

php - mysql 特定的 select with order

mysql - 在 Perl 中安装 DBD::mysql 时出现问题

javascript - Node.js 从 Javascript 代码内的 MySQL 查询返回 [object Object]

mysql - 有没有办法只导入数据库表架构

sql-server - 更新位掩码字段中的某一位 (SQL Server)

mysql - COUNT(*) 是否等待 InnoDB 中的行锁?

c# - 使用什么对象类型/实例进行同步