2016-07-21 4 views
0

したがって、新しいエントリが挿入されたときにトリガーで満たされるテーブルにこの1つの列があります。MySQL:データベースに挿入する際の整合性エラー

CREATE TABLE `users` (
`idusers` int(11) NOT NULL AUTO_INCREMENT, 
`uid` char(64) DEFAULT NULL, 
`uname` varchar(80) NOT NULL, 
`password` char(128) NOT NULL, 
`mail` varchar(120) NOT NULL, 
PRIMARY KEY (`idusers`), 
UNIQUE KEY `uname_UNIQUE` (`uname`), 
UNIQUE KEY `mail_UNIQUE` (`mail`), 
UNIQUE KEY `uid_UNIQUE` (`uid`) 
); 
DELIMITER $$ 
TRIGGER `flask`.`users_BEFORE_INSERT` BEFORE INSERT ON `users` FOR EACH ROW 
BEGIN 
set new.uid = sha2(new.idusers, 256); 
END$$ 
DELIMITER ; 

問題は、今私は(唯一のエラーのため、まだテスト1を持っている)新しい行を追加しようとすると、トリガーにnew.idusersの値は常に何らかの形で0の代わりに、現在のAUTO_INCREMENT値であるということです。
uidの生成に使用される値が実際のIDであり、必ずしも0ではないように、トリガーコードを変更するにはどうすればよいですか?

+0

可能な重複: http://stackoverflow.com/questions/5991464/before-after-insert-trigger-usingを-auto-increment-field?rq = 1 –

答えて

0

idusersAUTO_INCREMENTフィールドなので、その値はレコードがテーブルに挿入された後にのみ認識されます。
ではなくBEFORE INSERTトリガーのAFTER INSERTトリガーを使用して、新しく挿入されたレコードの更新:

DELIMITER $$ 
CREATE TRIGGER `flask`.`users_AFTER_INSERT` AFTER INSERT ON `users` FOR EACH ROW 
BEGIN 
UPDATE users SET uid = sha2(NEW.idusers, 256) WHERE idusers = NEW.idusers; 
END $$ 
DELIMITER ; 
関連する問題