触发器MYSQL不存在

触发器MYSQL不存在,mysql,Mysql,我创建了这个触发器: 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

我创建了这个触发器:

    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;
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;
它不起作用。我犯了这个错误:

您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 “近”存在从邀请中选择用户ID、用户ID\u inv 第1行的userId=new.user

你能帮我吗

我解决了此触发器的问题:

    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;
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;
现在我还有一个问题。我想从触发器中的Concat字符串执行查询,但直到现在我还没有成功,所以下面是我的代码:

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功能解决这个问题,我认为在存储函数或触发器中不允许使用动态SQL的错误非常明显。这是MySQL的众多限制之一。你需要找到一个不同的解决方案。是的,我知道。我花了很多时间才找到解决办法。我尝试创建一个执行动态SQL的存储过程,并从触发器调用该过程。那你觉得怎么样?