场景是:
我有2个表:today_version(存储每天的最新信息)和history_version(在Today_version中的记录发生更改之前,旧记录将首先插入history_version中进行备份,并在today_version中进行更改 >)。
它们是由以下人员创建的:
CREATE TABLE IF NOT EXISTS today_version (
region TEXT,
instance TEXT,
version TEXT,
last_update_time TEXT,
PRIMARY KEY (region, version)
)
CREATE TABLE IF NOT EXISTS history_version (
region TEXT,
instance TEXT,
version TEXT,
last_update_time TEXT
)
每天,today_version可能有2种可能的更改:插入新记录(未找到主键),或更新版本和last_update_time(存在主键)。所以我的python / pandas代码变成:
df = pd.read_csv("data.csv")
query = '''insert or replace into today_version (region, instance, version, last_update_time) values (?,?,?,?,?)'''
conn.executemany(query, df.to_records(index=False))
这部分有效,我已经通过以下方式签入了终端:
$ sqlite3
$ > select * from today_version;
...... (record)
然后,我想使用TRIGGER来实现这一部分:(当Today_version中的记录发生更改时,它将插入到history_version中进行备份。)
但是,在CREATE TRIGGER中,触发器仅支持“插入”,“删除”,“更新”,其中“替换”实际上是首先删除该行,然后插入新行。
我可以问我如何达到这一要求?目前,我正在尝试以下方法,但是没有用(给出空表):
CREATE TRIGGER add_history BEFORE DELETE ON today_version
WHEN new.version != old.version
BEGIN
INSERT INTO history_version (market, instance, version, last_update_time) VALUES (old.market, old.instance, old.version, old.last_update_time);
END;