我有一张有序列号的桌子。此序列号将更改,引用自动编号将不起作用。我担心扳机的价值会相撞。如果两个事务同时读取。
我已经在3个连接上运行了模拟测试,每个连接有大约100万条记录,没有冲突。

CREATE TABLE `aut` (
  `au_id` int(10) NOT NULL AUTO_INCREMENT,
  `au_control` int(10) DEFAULT NULL,
  `au_name` varchar(50) DEFAULT NULL,
  `did` int(10) DEFAULT NULL,
  PRIMARY KEY (`au_id`),
  KEY `Did` (`did`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1

TRIGGER `binc_control` BEFORE INSERT ON `aut` 
FOR EACH ROW BEGIN
SET NEW.AU_CONTROL = (SELECT COUNT(did)+1 FROM aut WHERE did = NEW.did);
END;

最佳答案

是的,如果两个会话同时运行触发器,则这取决于比赛条件。你不应该用这种方法。
它可能不会在测试期间发生,但您可以假设它会在生产期间发生。-)
有句老话说,One in a million is next Tuesday

08-04 14:49