mysql - MySQL TRIGGER 内的语法错误 -> Insert Into Statement

标签 mysql sql

我有一个触发器,可以将新行插入到另一个表中,但是某处出现错误,因为它告诉我我的值是 NULL,但它们不是或至少不应该是。

触发器代码

分隔符//

CREATE TRIGGER new_active_user AFTER UPDATE ON `pre_reg`
FOR EACH ROW
BEGIN
    DECLARE currentUser INT;
    DECLARE banned INT;
    DECLARE user_type INT;
    DECLARE username VARCHAR (25);
    DECLARE password VARCHAR (60);
    DECLARE usersince datetime;
    DECLARE email varchar(40);
    SET @currentUser := (select `id` FROM `pre_reg` WHERE `active` = 1);
    SET @banned = 0;
    SET @user_type = 3;
    SET @username := (select `username` FROM `pre_reg` WHERE `id` = currentUser);
    SET @password := (select `password` FROM `pre_reg` WHERE `id` = currentUser);
    SET @usersince := (select `date` FROM `pre_reg` WHERE `id` = currentUser);
    SET @email := (select `email` FROM `pre_reg` WHERE `id` = currentUser);
    INSERT INTO `users` (`id`, `username`, `password`) VALUES (@currentUser, @username, @password);
END//
Delimiter ;

我什至尝试在 SET 用户名、密码、电子邮件 SET 语句中对 currentUser 的值进行硬编码。但是它不起作用,我收到以下错误:

错误

SQLSTATE[23000]:违反完整性约束:1048 列“用户名”不能为空

我什至尝试只输入 ID (@currentUser) 以确保其设置,其余部分都是硬编码的(工作正常!所以我假设错误出现在 SET 语句中,但无法弄清楚它总是告诉我什么该值为 NULL

这就是我创建表格的方式

CREATE TABLE `pre_reg` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `username` varchar(25) NOT NULL,
 `password` varchar(60) NOT NULL,
 `email` varchar(40) NOT NULL,
 `authentication` varchar(32) NOT NULL,
 `active` smallint(1) NOT NULL DEFAULT '0',
 `date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
 PRIMARY KEY (`id`),
 UNIQUE KEY `username` (`username`,`email`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1
GO
CREATE TABLE `users` (
`id` INT PRIMARY KEY,
`username` VARCHAR (25) NOT NULL,
`password` VARCHAR (60) NOT NULL,
`banned` SMALLINT NOT NULL DEFAULT 0,
`user_since` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP
)ENGINE=InnoDB DEFAULT CHARSET=latin1
GO

最佳答案

这可能就是您想要的:

Delimiter //

CREATE TRIGGER new_active_user AFTER UPDATE ON `pre_reg`
FOR EACH ROW
BEGIN
    INSERT INTO `users` (`id`, `username`, `password`)
        VALUES (new.id, new.username, new.password);
END//
Delimiter ;

它会将 pre_reg 中刚刚更新的内容插入到 users 表中。

关于mysql - MySQL TRIGGER 内的语法错误 -> Insert Into Statement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27894750/

相关文章:

php - 在无缓冲查询的上下文中,foreach 是否等同于 while?

sql - 使用 SQL Server 2005 检索每个组的 TOP X 成员

sql - 在 postgres 中加入性能

sql - 数据库的事务日志已满

sql - 在 SQL Server 中计算给定时间段的月份的最后几天

php - 如何使用PHP向MySQL添加数据

php - 使用 Laravel 在分组和平均时查询表

mysql - SQL 选择一个语句期望值以以下开头

mysql - 在同一服务器上迁移 Drupal 站点

php - fatal error :在第 24 行调用 C:\wamp\www\FINAL login\memberpage.php 中未定义的方法 PDO::fetch()