【发布时间】:2017-02-19 17:09:27
【问题描述】:
我正在尝试实现Table with multiple incrementing columns which doesn't reuse deleted column values。此帖子已被How auto-increment within a subset of the table MYSQL 标记为已回答,但是,引用的帖子不符合规定的要求,因为它允许复制子集递增的键。在第一篇文章中,给出了一条评论:
创建一个表来存储每种类型的最后一个 AI 编号。使用触发器 在每次插入时增加它并复制到原始表。 – 保罗 明镜
我认为这是个好主意,并实施了。
-- MySQL Script generated by MySQL Workbench
-- 02/19/17 08:53:34
-- Model: New Model Version: 1.0
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`t1`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`t1` (
`pk1` INT NOT NULL,
`pk2` INT NOT NULL,
`id2` INT NOT NULL DEFAULT 0,
PRIMARY KEY (`pk1`, `pk2`))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`t2`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`t2` (
`id` INT NOT NULL AUTO_INCREMENT,
`id2` INT NOT NULL,
PRIMARY KEY (`id`))
ENGINE = InnoDB;
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
USE `mydb`;
DELIMITER $$
USE `mydb`$$
CREATE TRIGGER `t2_BINS` BEFORE INSERT ON `t2` FOR EACH ROW
begin
UPDATE t1 SET id2=id2+1 WHERE pk1=NEW.pk1 AND pk2=NEW.pk2;
SET NEW.id2=(SELECT id2 FROM t1 WHERE pk1=NEW.pk1 AND pk2=NEW.pk2);
end$$
DELIMITER ;
但是,在执行脚本时,我收到以下错误:
ERROR 1235 (42000) at line 68: This version of MySQL doesn't yet support 'multiple triggers with the same action time and event for one table'
我使用的是 MySQL 5.5.54。有没有新版本可以做到这一点?
是否有任何解决方法来完成此操作?
【问题讨论】: