0
我在MySQL Workbench 5.6中執行以下SQL代碼時遇到問題。該表是有序創建的,觸發器創建代碼也可以正常運行。但是,當我嘗試運行這兩個插入到語句中時,我有一個錯誤錯誤代碼:1054.未知列'通過'在'字段列表'中。如果我運行最後的選擇語句,它也按預期運行!?在插入觸發器阻止執行以下INSERT INTO語句之前
我真的無法想象運行觸發器創建腳本後發生了什麼!
如果我在插入語句之前不運行triger創建代碼,它們按預期執行,並且數據插入到列中。
/*任務15:編寫一條SQL語句來創建一個表用戶。用戶應具有用戶名,密碼,全名和上次登錄時間。爲表格字段選擇適當的數據類型。 使用主鍵約束定義主鍵列。將主鍵列 定義爲標識以便於插入記錄。定義唯一約束以避免重複使用 用戶名。定義檢查約束以確保密碼長度至少爲5個字符。 */
create table Users(
UserID int auto_increment not null,
Username nvarchar(50) not null,
Pass varchar(100) not null,
FullName nvarchar(100),
LastLoginTime datetime,
constraint PK_Users primary key(UserID),
constraint UK_Users_Username UNIQUE(Username),
constraint CH_Users_Password CHECK(length(users.Pass)>=5)
);
DELIMITER $$
CREATE TRIGGER `TR_BeforeInsert_Users`
BEFORE INSERT ON `users`
FOR EACH ROW
BEGIN
IF LENGTH(`Pass`) < 5 THEN
SIGNAL SQLSTATE '12345'
SET MESSAGE_TEXT = 'check constraint on Pass failed';
END IF;
END$$
delimiter ;
Insert into Users(Username, Pass, FullName,lastlogintime) values('ttitto','alabala','Todor', now());
Insert into Users(Username, Pass, FullName,lastlogintime) values('ttitt','ala','Todor', now());
select length(Pass) from users;
它的工作和解決了我的問題。感謝您在這4小時內幫助我解決問題! – ttitto
@ttitto:另請注意,該任務要求您檢查密碼長度超過5 *個字符*,這需要使用MySQL的['CHAR_LENGTH()'](http://dev.mysql.com/ doc/en/string-functions.html#function_char-length)函數。 ['LENGTH()'](http://dev.mysql.com/doc/en/string-functions.html#function_length),你正在使用,返回*字節數*可能小於如果列使用多字節字符集進行編碼,則爲字符數。 – eggyal
我也不知道。再次感謝! – ttitto