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

标签 mysql database-trigger

假设 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/

相关文章:

mysql - 我的 SQL 查询查找具有匹配主键的最大 <= 日期

sql - 输出子句 VS 触发器

MySQL触发器为新行设置值并更新同一个表中的另一个

linux - 如何为 Linux shell 脚本编写 DB2 函数

mysql - ORDER BY 特定值,然后轮换其余值

MySQL AS 语句生成错误

java - 如何使用 JPQL 收集 MySQL 基本路径?

html - 出现多个 header

sql - 触发器 : How does the inserted table work? 如何访问它的行?

Postgresql:如何从函数触发器中结构化的记录访问驼峰式键