2016-06-16 12 views
0

新しいユーザーが自動的に登録されると、そのpermissionIDは1になります。これは単純ですが、mysql構文エラーが私を殺しています。構文エラーMysql

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '@userID int' at line 5 

はEDIT::私はおよそDELIMETERNEW代わりinsertedのを知りませんでした。これは誤りである

CREATE TRIGGER `user_default_role` 
AFTER INSERT ON `users` 
FOR EACH ROW 
BEGIN 
DECLARE @userID int; 
SET @userID = (SELECT userID FROM inserted LIMIT 1); 
INSERT INTO `user_permission` (`userID`,`permissionID`,`created_at`,`updated_at`) VALUES (@userID,1 ,NOW(),null); 
END 

を助けてください。すばらしく反応したすべての人に感謝します。

DELIMITER $$ 
CREATE TRIGGER `user_default_role` AFTER INSERT ON `users` 
FOR EACH ROW 
BEGIN 
    INSERT INTO `user_permission` (`userID`, `permissionID`, `created_at`, `updated_at`) 
     VALUES (new.userID, 1, NOW(), null); 
END;$$ 
DELIMITER ; 
+1

'create trigger'の前に' delimiter'文がありますか? 'inserted'というテーブルがありますか?それは疑わしい。 –

答えて

1

insertedは、SQL Serverからのものですが、そうでない場合は、あなたの構文は本当にMySQLをお勧めします:ここに更新されたコードです。これはあなたのために働く可能性があります

DELIMITER $$ 

CREATE TRIGGER `user_default_role` AFTER INSERT ON `users` 
FOR EACH ROW 
BEGIN 
    INSERT INTO `user_permission` (`userID`, `permissionID`, `created_at`, `updated_at`) 
     VALUES (new.userId, 1, NOW(), null); 
END;$$ 

DELIMITER ; 
1

あなたが理由の理由を次の構文エラーを取得している:

の1-欠落区切り文字を。

2セッション変数(@から始まる)を宣言することはできません。それらに値を直接設定できます。

3トリガーが一時的にデータを挿入するMySQLに挿入されたテーブルはありません。NEWを使用して挿入された値にアクセスできます。

DELIMITER $$ 
CREATE TRIGGER `user_default_role` 
AFTER INSERT ON `users` 
FOR EACH ROW 
    BEGIN 
    SET @userID =NEW.userID; 
    INSERT INTO `user_permission` (`userID`,`permissionID`,`created_at`,`updated_at`) VALUES (@userID,1 ,NOW(),null); 
    END$$ 
DELIMITER ;