我需要使用触发器填充MySQL表。它从表中读取并将数据复制到另一个表。 这是触发器:
CREATE DEFINER = root
@ localhost
程序create
()
开始
从开放中删除;
插入到opent中从Open2中选择*,其中open = 1;
END $$
DELIMITER;
碰巧其他进程试图从表中选择*行并发现它为空。如何在执行触发器时阻止其他查询选择打开表?
我试着更好地解释一下。我有很多客户只用select连接到一个表。所以有一个php页面可以选择TableA中的所有记录。 TableA由触发器创建,该触发器在更新某些记录后将数据从TableB复制到TableA。 问题是当触发器工作时,它必须删除TableA中的所有行并再次插入。如果在此期间调用php,它会找到一个部分表。 我真的不知道在哪里使用表锁。在触发器中或在php页面中使用select for update?
答案 0 :(得分:0)
您应该进行锁定读取,请参阅此处的文档: http://dev.mysql.com/doc/refman/5.6/en/innodb-locking-reads.html
然而,这取决于时间,即使你锁定了桌子,听起来还有一个窗口,它可能还不存在。