【问题标题】:Declaring variables inside Triggers在触发器中声明变量
【发布时间】:2017-03-09 01:57:45
【问题描述】:

我在第 5 行遇到错误(在第一个声明的分号处),某些内容与 MariaDB 不对应。有没有人遇到过类似的问题,或者知道如何解决这种问题?

CREATE TRIGGER incative
BEFORE DELETE
ON users FOR EACH ROW
BEGIN
    DECLARE _user INT;
    DECLARE username  VARCHAR(150),_password  VARCHAR(150),
            email  VARCHAR(320),ip_address varchar(150),
            _data VARCHAR(120),_time VARCHAR(150);
    DECLARE _active int DEFAULT 1;

    SELECT * INTO _user, username, _password, email, ip_address,
                  _data, _time, _active
        FROM users WHERE ID_User = old.ID_User

    INSERT into users(_user, username, _password, email, ip_address,
                      _data, _time, _active)
END;

提前致谢!

【问题讨论】:

  • 为什么要获取old 中已有的列?为什么要重新插入要删除的行? _active 的逻辑错误?还是into users
  • 更新无效,所以我不得不尝试其他解决方案。这个解决方案对我来说看起来更好。如果您知道任何更好的解决方案,那么这个问题就是给它的。谢谢。

标签: mysql variables triggers mariadb


【解决方案1】:

您必须在创建之前添加 DELIMITER $$...

DELIMITER $$
CREATE TRIGGER incative
BEFORE DELETE .....

有关更多信息,您可以查看此答案:https://stackoverflow.com/a/1346645/1548932

我不知道 mariaDB 的情况,但是如果您使用 Mysql,则必须将第 6 行更改为:

DECLARE username,_password,email ,ip_address,_data,_time VARCHAR(150);

或者如果长度不同,则必须每行声明一个变量,例如:

DECLARE username  VARCHAR(150)
Declare email  VARCHAR(320) 

最后不要忘记;在第 8 行和第 10 行的末尾

【讨论】:

  • 第一行 (DELIMITER $$) 每次使用分号 (;) 时都会显示错误,我将其更改为 DELIMITER ;我已经做了你建议的改变,但我仍然得到同样的错误。 #1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以获取正确的语法,以便在第 4 行的 '' 附近使用
猜你喜欢
  • 1970-01-01
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多