错误 #1193 MySql,插入触发器

Posted

技术标签:

【中文标题】错误 #1193 MySql,插入触发器【英文标题】:Error #1193 MySql, insert trigger 【发布时间】:2019-01-02 03:55:53 【问题描述】:
CREATE TRIGGER `UpdateId` 
BEFORE INSERT ON `comments`
FOR EACH ROW
set @vid=(select MAX(comments.id) from comments)+1; 
set new.id=@vid;

这个查询给了我一个错误 #1193 说 id 变量是未知的。

似乎有类似问题的每个人都没有将“新”clausole 放在变量之前,但在我的情况下它仍然不起作用。 'new' clausole 在我输入时没有突出显示,看起来它不是一个特殊的关键字,而是一个普通的单词。

【问题讨论】:

【参考方案1】:

从https://dev.mysql.com/doc/refman/8.0/en/trigger-syntax.html 看来,您可能只需要使用一个set 语句或使用begin ... end 构造。我的预感是create trigger 语句以第一个分号结束,然后当它到达new.id=@vid; 时,MySQL 不知道你在说什么。

CREATE TRIGGER `UpdateId` 
BEFORE INSERT ON `comments`
FOR EACH ROW
set 
    @vid=(select MAX(comments.id) from comments)+1, 
    new.id=@vid;

delimiter //
CREATE TRIGGER `UpdateId` 
BEFORE INSERT ON `comments`
FOR EACH ROW
begin
    set @vid=(select MAX(comments.id) from comments)+1; 
    set new.id=@vid;
end;//
delimiter;

【讨论】:

以上是关于错误 #1193 MySql,插入触发器的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误代码:1193。未知的系统变量

使用“之前”触发器插入后的 MySQL PDO LastInsertID 返回错误值

当我尝试在 mysql 中创建触发器时出现语法错误

插入触发器后MySQL不起作用

更新前的 MySQL 使用 PhpMyAdmin 触发插入语法错误

MySQL触发器:在插入之前将记录与先前的记录进行比较