mysql - 在触发器内声明变量

标签 mysql variables triggers mariadb

我在第 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;

提前致谢!

最佳答案

您必须在创建之前添加 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 行末尾

关于mysql - 在触发器内声明变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40266717/

相关文章:

mysql - 在触发器中创建 View

oracle - 如何解决这个关于 Oracle 触发器的练习

php - 通过比较语句在 Doctrine 中排序结果

mysql - Jira:连接数据库时出错

variables - Joomla 为什么 JFactory 经常通过引用传递

C++ 类 getter 在 main 中不返回任何值,但在类中返回任何值?

variables - 如何将变量名称作为参数的一部分传递给批处理文件,然后使用它?

android - 为什么我的听众触发快乐

JavaPreparedStatement带外键的多批量插入

php - 将 Leaflet-js ID、Lat 和 Lng 存储到 Mysql 数据库