SQLite,在插入另一个 table 后自动更新 table 中的字段
SQLite, Automatically update field in table after insert in another table
我是数据库的新手,所以如果这个问题是关于一些简单明了但我无法独自解决的问题,我提前道歉。
基本上,我正在尝试执行以下操作(出于教育目的,与任何“严重”无关):
我有一个 table courses
,每门课程都有
- 一个id
- 一个名字
- 报名总人数
那我有table个people
,每个都有
- 一个id
- 一个名字
- 一个
course_id
(假设每人只能报名一个
课程)。 course_id
是与课程 ID 相关的外键。
我想知道的是,每当我在 people
中插入一行时,如何自动更新参加课程的人数(增加参加特定课程的人数已注册)。
我读到我可以使用触发器来做到这一点,但我并没有真正理解如何做。无论如何,我正在从 javascript 查询数据库,所以基本上我只想传递 INSERT
查询。
您需要一个 AFTER INSERT
触发器:
CREATE TRIGGER trg_people_ins AFTER INSERT ON people
BEGIN
UPDATE courses
SET total = COALESCE(total, 0) + 1
WHERE id = NEW.course_id;
END;
将 total
更改为 courses
中列的实际名称。
如果total
的默认值是0
那么你不需要COALESCE()
,所以改为:
SET total = total + 1
我是数据库的新手,所以如果这个问题是关于一些简单明了但我无法独自解决的问题,我提前道歉。 基本上,我正在尝试执行以下操作(出于教育目的,与任何“严重”无关):
我有一个 table courses
,每门课程都有
- 一个id
- 一个名字
- 报名总人数
那我有table个people
,每个都有
- 一个id
- 一个名字
- 一个
course_id
(假设每人只能报名一个
课程)。 course_id
是与课程 ID 相关的外键。
我想知道的是,每当我在 people
中插入一行时,如何自动更新参加课程的人数(增加参加特定课程的人数已注册)。
我读到我可以使用触发器来做到这一点,但我并没有真正理解如何做。无论如何,我正在从 javascript 查询数据库,所以基本上我只想传递 INSERT
查询。
您需要一个 AFTER INSERT
触发器:
CREATE TRIGGER trg_people_ins AFTER INSERT ON people
BEGIN
UPDATE courses
SET total = COALESCE(total, 0) + 1
WHERE id = NEW.course_id;
END;
将 total
更改为 courses
中列的实际名称。
如果total
的默认值是0
那么你不需要COALESCE()
,所以改为:
SET total = total + 1