gpt4 book ai didi

mysql - 未知的系统变量 : "new.id" is not recognized

转载 作者:行者123 更新时间:2023-11-29 15:58:01 24 4
gpt4 key购买 nike

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

尝试在触发器中将“new.id = @valid”替换为“alter table wooster_brush_employee auto_increment = @valid”,但没有成功。
创建表 wooster_brush_employee(
id int 主键自增,
名字 varchar(15),
姓氏 varchar(20),
用户名 varchar(10),
密码 varchar(15),
电子邮件 varchar(30)
);
分隔符//
在插入 wooster_brush_employee 之前创建触发器 validate_id
对于每一行
设置@old = last_insert_id();
设置@valid = last_insert_id();
调用 wooster_brush_employee_id_validator(@old, @valid);
设置 NEW.id = @valid;
结尾;
分隔符;

最佳答案

我相信你在这里的整个方法是不平衡的,你甚至不需要使用这个触发器。在 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将在幕后自动生成序列中的下一个值。

关于mysql - 未知的系统变量 : "new.id" is not recognized,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com