Table with multiple incrementing columns which doesn't reuse deleted column valuesを実装しようとしています。この投稿にはすでにHow auto-increment within a subset of the table MYSQLが返信されているとタグ付けされていましたが、参照された投稿はサブセットの増分キーを複製できるため、記載された要件を満たしませんでした。最初の記事では、コメントが与えられました。同じテーブルでUPDATEとSELECTをトリガして、エラー1235(42000)
Create a table that will store last AI numbers per type. Use a trigger to increment it on every insert and copy to the original table. – Paul Spiegel
私は、これは素晴らしいアイデアだと思ったし、それを実装しました。
-- MySQL Script generated by MySQL Workbench
-- 02/19/17 08:53:34
-- Model: New Model Version: 1.0
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@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 [email protected]_SQL_MODE;
SET [email protected]_FOREIGN_KEY_CHECKS;
SET [email protected]_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を使用しています。そうすることができる新しいバージョンがありますか?
これを行うための回避策はありますか?