SQLITE-在触发器内部执行插入

时间:2019-06-13 16:47:32

标签: sqlite triggers sql-insert

我正在尝试创建一个触发器,当在其他关系中添加元组时,该触发器会自动将元组插入到关系中。

这是我的代码:

DROP TRIGGER IF EXISTS AdicionaAmigos; 

CREATE TRIGGER AdicionaAmigos 
AFTER INSERT ON Estudante 
FOR EACH ROW 
BEGIN 
    INSERT INTO Amizade
    VALUES
    (
        SELECT New.ID, Estudante.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
    );
    INSERT INTO Amizade
    VALUES
    (
        SELECT Estudante.ID, New.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
    );
END;

这是我收到的错误:

Error: near line 101: near "SELECT": syntax error

第101行=创建触发器AdicionaAmigos

SQLITE版本:3.17

1 个答案:

答案 0 :(得分:1)

您的INSERT INTO语句中存在语法错误。
您必须删除VALUES子句并保留INSERT INTO...SELECT...

DROP TRIGGER IF EXISTS AdicionaAmigos; 

CREATE TRIGGER AdicionaAmigos 
AFTER INSERT ON Estudante 
FOR EACH ROW 
BEGIN 
    INSERT INTO Amizade
        SELECT New.ID, Estudante.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;
    INSERT INTO Amizade
        SELECT Estudante.ID, New.ID 
        FROM Estudante 
        WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;
END;

您可以找到有关INSERT INTO语法here的更多信息。
另外,单独的INSERT INTO语句可以与UNION ALL合并为1:

INSERT INTO Amizade
    SELECT New.ID, Estudante.ID 
    FROM Estudante 
    WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID
    UNION ALL
    SELECT Estudante.ID, New.ID 
    FROM Estudante 
    WHERE New.curso = Estudante.curso AND New.ID <> Estudante.ID;