簡體   English   中英

MySQL TRIGGER中的語法錯誤->插入語句

[英]Syntax ERROR inside MySQL TRIGGER -> Insert Into Statement

我有一個觸發器,它將新行插入到另一個表中,但是在某處出現錯誤,因為它告訴我我的值是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語句中存在錯誤,但無法弄清楚它告訴我的總是值是空值

這就是我創建表格的方式

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表中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM