未知系统变量:无法识别"new.id"



假设 6,7,8 都被取了,l 尝试插入 id = 6 的数据。触发器的目的是查找下一个可用数字。但是,MySQL无法识别 new.id或者,我可以改变auto_increment的价值吗?我为什么要这样做?因为在 OracleDB 中,序列生成器将递增(并最终找到可用数量(,而如果以某种方式生成重复的主键,MySQL 的序列生成器不会递增。

尝试在触发器中将"new.id = @valid"替换为"更改表 wooster_brush_employee auto_increment = @valid",但没有奏效。 create table wooster_brush_employee( id int primary key auto_increment, first_name varchar(15), last_name varchar(20), username varchar(10), password varchar(15), email varchar(30) ); delimiter // create trigger validate_id before insert on wooster_brush_employee for each row set @old = last_insert_id(); set @valid = last_insert_id(); call wooster_brush_employee_id_validator(@old, @valid); set NEW.id = @valid; end; delimiter;

我相信

你在这里的整个方法都是不合时宜的,你甚至不需要使用这个触发器。 在MySQL或Oracle中,自动增量列的要点是数据库处理在序列中查找下一个可用数字的问题。 虽然自动增量协定不保证找到的下一个值将大于列中已有的每个值,但它确实保证下一个值是唯一

因此,如果您想使用 MySQL 的自动增量功能,那么下次插入时,只需从列列表中省略id

INSERT INTO wooster_brush_employee (first_name, last_name, username, password, email)
VALUES
    ('Jon', 'Skeet', 'jonskeet', '*****", 'jon.skeet@google.com');

由于省略了id,MySQL将在后台的序列中自动生成下一个值。

最新更新