插入触发后,自动增量ID值增加1

时间:2018-11-26 13:24:52

标签: mysql sql database-trigger

我有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
;

我在用户表上插入触发器后创建了。 即,当我在user_dummy表中插入1条记录时,它将在表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 

上面的触发器能够将记录插入用户表,但是在每个user_role记录之后auto_increment值增加1。

enter image description here enter image description here enter image description here

如果您发现user_seq 3丢失。插入4条记录后,触发器将auto_increment值设置为7。

enter image description here

该如何解决?

1 个答案:

答案 0 :(得分:0)

只是一种替代方法:更好的是,您可以使用count函数对现有记录总数进行计数,然后将其增加一个并按as进行分配。如果您有兴趣保留插入序列。