MySQL触发器更新新行

Rus*_* C. 2 mysql sql triggers

我们正在两个系统之间进行迁移,并且需要为我们的一个数据库表保留2个字段,这些字段始终保持同步.这是表结构:

CREATE TABLE `example` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `object_id` int(11) NOT NULL DEFAULT '0',
  `value` varchar(200) DEFAULT NULL,
  PRIMARY KEY (`id`),
  UNIQUE KEY `object_id` (`object_id`)
);
Run Code Online (Sandbox Code Playgroud)

每当其中一个系统插入新行时,我们需要将object_id设置为id.我们不能使用'before insert',因为id列是一个auto_increment列,因此在插入之前它的值为NULL,并且由于MySQL'插入'on trigger之后的限制,我不能执行以下操作:

CREATE TRIGGER insert_example 
  AFTER INSERT ON  example 
  FOR EACH ROW 
  SET NEW.object_id = NEW.id;
Run Code Online (Sandbox Code Playgroud)

我无法更新任何一个系统的代码,因此我需要一种方法在数据库端完成此任务.两个系统都将插入新行.我怎么能做到这一点?

won*_*nk0 5

使用在插入之前触发的触发器应该完成工作

CREATE TRIGGER insert_example 
  BEFORE INSERT ON  example 
  FOR EACH ROW 
  SET NEW.object_id = NEW.id;
Run Code Online (Sandbox Code Playgroud)

编辑:

正如OP指出的那样,NEW.id不能用于自动增量; 一个可以使用下面的触发器(风险自担使用):

CREATE TRIGGER insert_example 
      BEFORE INSERT ON  example 
      FOR EACH ROW 
      SET NEW.object_id = (
            SELECT AUTO_INCREMENT 
            FROM information_schema.TABLES 
            WHERE TABLE_SCHEMA = DATABASE() 
            AND TABLE_NAME = 'example'
      );
Run Code Online (Sandbox Code Playgroud)

但我宁愿重新考虑这个有点奇怪的要求 - 为什么你需要在表中两次获得pk值?