このトリガーを作成しました:
CREATE TABLE `Invitations`
( `userId` varchar(255) NOT NULL, `name` varchar(255) DEFAULT NULL,
`status` varchar(1) DEFAULT NULL, `userId_inv` varchar(255) NOT NULL,
PRIMARY KEY (`userId`,`userId_inv`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1
CREATE TRIGGER `Invitation_001_after_trig` AFTER INSERT ON `invitation_001`
FOR EACH ROW
BEGIN
IF ((new.userId,'001') NOT EXISTS (SELECT `userId`,`userId_inv` FROM `Invitations`
WHERE `userId`= new.userId AND `userId_inv` = '001' LIMIT 1))
THEN
INSERT INTO `Invitations`(`userId`, `name`,`status`,`userId_inv`)
values (new.userId, new.name,new.status,'001');
DELETE FROM `invitation_001` WHERE `status` = 'a';
END IF;
END;
それは動かなかった。私はこのエラーがありました:
SQL 構文にエラーがあります。
userId
1 行目の 'EXISTS (SELECT ,userId_inv
FROMInvitations
WHEREuserId
= new.user' の近くで使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。
それで、あなたは私を助けてくれませんか。
このトリガーで問題を解決しました:
CREATE TRIGGER `Invitation_001_after_trig` AFTER INSERT ON `invitation_001`
FOR EACH ROW
BEGIN
INSERT INTO `Invitations` (`userId`, `name` ,`status` ,`userId_inv`) SELECT * FROM
invitation_001 iv WHERE
NOT EXISTS (SELECT 1 FROM `Invitations` ivs WHERE ivs.`userId` = iv.`userId` AND
ivs.`userId_inv` = iv.`userId_inv`) AND iv.`userId_inv`='001';END;
今、私は別の問題を抱えています。トリガーで連結文字列からクエリを実行したいのですが、今まで成功しなかったので、コードは次のとおりです。
CREATE TRIGGER `InvitationS_after_trig` AFTER INSERT ON `Invitations`
FOR EACH ROW
BEGIN
if(new.status ='c' OR new.status ='r')
BEGIN
SET @query = CONCAT("INSERT INTO", Invetations.userId,"values(new.userId,new.name,new.status,new.userId_inv);");
PREPARE stmt1 FROM @query;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
END IF;
END;
構文の問題は解決しましたが、別の問題があります。
動的 SQL は、ストアド関数またはトリガーでは許可されていません
MySQL バージョン 5.1.69 を使用しています。
最後にあきらめて、Java Fondionを使用してこの問題を解決します