mysql – 基于查询原子的触发器?

我有一个具有序列号的表.此序列号将更改,并且引用自动编号将不起作用.我担心触发器的值会发生碰撞.如果两个事务同时读取.

我已经在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;

解决方法:

是的,如果两个会话同时运行触发器,则这会受到竞争条件的影响.您不应该使用此解决方案.

它可能不会在测试期间发生,但您可以假设它将在生产期间发生.

上一篇:Silverlight项目笔记5:Oracle归档模式引起的异常&&表格控件绑定按钮


下一篇:javascript – 尝试使用jquery.mousewheel触发滚动事件