我有一个带有序列号的表。此序列号将会更改,并且引用自动编号将不起作用。我担心触发器的值会发生冲突。如果两个事务同时读取。
我已经对 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;
是的,如果两个会话同时运行触发器,这会受到竞争条件的影响。您不应该使用此解决方案。
测试期间可能不会发生,但您可以假设它will发生在生产过程中。 :-)
有句老话说,下周二是百万分之一 http://blogs.msdn.com/b/larryosterman/archive/2004/03/30/104165.aspx.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)