我的mysql数据库中的表上有一个BEFORE INSERT触发器。它的作用是:
如果在值之间发现重叠,请通过以下方式取消INSET查询:
设置msg =“预订已存在”; signal sqlstate'45000'SET MESSAGE_TEXT = msg;
如果未找到重叠,请让查询完成。
然而,触发器不起作用,因为我预期它在非常罕见的情况下,它忽略了重叠值。我能想到的唯一可能的情况是:
我已经通过多次同时运行两个这样的查询进行了测试,但直到现在还发生了一次。但它仍然有,所以我需要一种方法来确保它永远不会再发生。
我认为一种可能的情况是在运行INSERT查询之前显式锁定表。
因此交易将如下所示:
LOCK TABLE t WRITE;
LOCK TABLE t READ;
INSERT INTO t ....;
UNLOCK TABLE t;
在这种情况下,我的问题是:
如果现在我同时执行此事务,第二个会排队还是返回错误?
任何输入都会有所帮助。谢谢!