Значение Id автоинкремента увеличилось на 1 после триггера вставки - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть 3 таблицы, как показано ниже:

CREATE TABLE `user_dummy` (
    `user_id` INT(11) NOT NULL AUTO_INCREMENT,
    `user_name` VARCHAR(50) NOT NULL,
    `user_email` VARCHAR(100) NOT NULL,
    PRIMARY KEY (`user_id`)
)
ENGINE=InnoDB
;

CREATE TABLE `user_role` (
    `user_role_id` INT(11) NOT NULL AUTO_INCREMENT,
    `user_role_name` VARCHAR(255) NULL DEFAULT NULL,
    PRIMARY KEY (`user_role_id`)
)
ENGINE=InnoDB
;

CREATE TABLE `user` (
    `user_seq` INT(11) NOT NULL AUTO_INCREMENT,
    `user_id` INT(11) NOT NULL,
    `user_name` VARCHAR(50) NOT NULL,
    `user_email` VARCHAR(100) NOT NULL,
    `user_role_id` INT(11) NOT NULL,
    PRIMARY KEY (`user_seq`),
    INDEX `FKh2wc2dtfdo8maylne7mgubowq` (`user_role_id`),
    CONSTRAINT `FKh2wc2dtfdo8maylne7mgubowq` FOREIGN KEY (`user_role_id`) REFERENCES `user_role` (`user_role_id`) ON UPDATE CASCADE ON DELETE CASCADE
)
ENGINE=InnoDB
;

Я создал после триггера вставки на пользовательскую таблицу.то есть, когда я вставляю 1 запись в таблицу user_dummy, он вставляет записи в таблицу user таблицы со всеми сопоставлениями user_role.

триггер:

CREATE TRIGGER `user_dummy_after_insert` AFTER INSERT ON `user_dummy` FOR EACH ROW BEGIN

    INSERT INTO user(user_id, user_name, user_email, user_role_id)
    SELECT NEW.user_id, NEW.user_name, NEW.user_email, user_role_id 
    FROM user_role;

END 

Выше триггер может вставлять записи впользовательская таблица, но значение auto_increment увеличивается на 1 после каждой записи user_role.

enter image description hereenter image description here enter image description here

Если вы заметили, что user_seq 3 отсутствует.И после вставки 4 записей значение auto_increment устанавливается триггером как 7.

enter image description here

Как это исправить?

1 Ответ

0 голосов
/ 26 ноября 2018

Просто альтернатива : Лучше использовать функцию подсчета, чтобы подсчитать общее количество существующих записей, а затем увеличить ее на единицу и назначить в соответствии с.Если вы заинтересованы сохранить последовательность вставки.

...