Sqlite:在ID字段中插入时,通过从旧条目复制来插入新记录

时间:2016-10-28 06:48:05

标签: sqlite triggers insert

当我插入具有现有ID号的新记录时,我想创建一个重复的条目 即当我在ID字段中输入一个带有2的新行时,它将通过复制ID为2的行中的所有字段自动创建一个新条目

我正在使用以下触发器,但它无效。
1)在ID列中插入现有号码时触发器无法工作 2)当我将new.ID更改为new.col_2之类的其他字段时,触发器有效,但触发后也会创建一个额外的条目,我不想要它。

如何解决这两个问题或者是否有任何解决方法? 感谢。

CREATE TRIGGER "main"."NewTrigger" BEFORE INSERT ON "record" FOR EACH ROW WHEN new.ID is not NULL
BEGIN
    INSERT INTO record (col_1, col_2) 
    SELECT col_1, col_2 FROM record
    WHERE ID = new.ID;
END;

e.g。
原始表名为"记录"
ID | col_1 | COL_2
1 |阿达| 20个
2 |本| 56个
3 |糖果| 82个

当我插入这样的新条目时:
ID | col_1 | COL_2
2个

结果表"记录"将成为:
ID | col_1 | COL_2
1 |阿达| 20个
2 |本| 56个
3 |糖果| 82个
4 |本| 56个

1 个答案:

答案 0 :(得分:0)

INSERT语句插入一个新行。 这不是你想要的,因为你已经插入了一行。

您需要做的是在插入后更改行中的值:

CREATE TRIGGER NewTrigger
AFTER INSERT ON record
FOR EACH ROW
WHEN NEW.ID IS NOT NULL AND NEW.Col1 IS NULL
BEGIN
    UPDATE record
    SET (Col1, Col2) = (SELECT Col1, Col2
                        FROM record
                        WHERE ID = NEW.ID
                          AND Col1 IS NOT NULL);
    WHERE ID = NEW.ID
      AND Col1 IS NULL;
END;

(使用行值需要SQLite 3.15.0或更高版本。)