Mysql在执行触发器时阻止对表的选择

时间:2015-03-17 23:09:42

标签: mysql triggers

我需要使用触发器填充MySQL表。它从表中读取并将数据复制到另一个表。 这是触发器:

CREATE DEFINER = root @ localhost程序create() 开始     从开放中删除;     插入到opent中从Open2中选择*,其中open = 1; END $$ DELIMITER;

碰巧其他进程试图从表中选择*行并发现它为空。如何在执行触发器时阻止其他查询选择打开表?

我试着更好地解释一下。我有很多客户只用select连接到一个表。所以有一个php页面可以选择TableA中的所有记录。 TableA由触发器创建,该触发器在更新某些记录后将数据从TableB复制到TableA。 问题是当触发器工作时,它必须删除TableA中的所有行并再次插入。如果在此期间调用php,它会找到一个部分表。 我真的不知道在哪里使用表锁。在触发器中或在php页面中使用select for update?

1 个答案:

答案 0 :(得分:0)

您应该进行锁定读取,请参阅此处的文档: http://dev.mysql.com/doc/refman/5.6/en/innodb-locking-reads.html

然而,这取决于时间,即使你锁定了桌子,听起来还有一个窗口,它可能还不存在。