为什么触发器导致所有行都被更新,而它应该只更新一个?

问题描述 投票:0回答:1

以下触发器仅用于将字符串值“undefined”替换为 DEFAULT 值,但所有插入的行都会受到影响:

CREATE TABLE IF NOT EXISTS mytable (
 id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
 mycolumn BOOLEAN DEFAULT '0');

CREATE TRIGGER IF NOT EXISTS onnull
AFTER INSERT ON mytable
FOR EACH ROW
WHEN NEW.mycolumn = 'undefined'
BEGIN
    UPDATE mytable
      SET mycolumn = (SELECT dflt_value FROM pragma_table_info('mytable') WHERE name = 'mycolumn' ) ;
END;

INSERT INTO 'mytable' ('mycolumn') VALUES
      (true),
      (false),
      ('undefined');

select * from mytable;

select
的结果表示“触发”值被应用到所有行:

1|'0'
2|'0'
3|'0'

有没有办法达到想要的效果?

我正在使用

SQLite version 3.40.1 2022-12-28
.

sqlite triggers sql-insert
1个回答
0
投票

更新必须仅限于有问题的行,例如通过添加:

WHERE rowid=NEW.rowid
© www.soinside.com 2019 - 2024. All rights reserved.