我正在为我的银行管理程序创建一个sqlite3数据库。要创建表,我使用了以下脚本。
1 CREATE TABLE account_profile(
2 account_id INTEGER PRIMARY KEY,
3 first_name TEXT NOT NULL,
4 last_name TEXT NOT NULL,
5 date_of_birth TEXT NOT NULL,
6 phone TEXT UNIQUE NOT NULL,
7 email TEXT UNIQUE NOT NULL
8 );
9
10 CREATE TABLE balance(
11 account_id INTEGER PRIMARY KEY,
12 balance REAL DEFAULT 0,
13 FOREIGN KEY (account_id)
14 REFERENCES account_profile (account_id)
15 ON UPDATE CASCADE
16 ON DELETE CASCADE
17 );
现在通过使用如下插入命令
INSERT INTO account_profile(first_name, last_name, something...) values (something...);
我希望在余额表中使用account_id 1创建一行。
可能吗?如果是这样,我应该如何修改第一个代码块?
你需要一个AFTER INSERT trigger
:
CREATE TRIGGER ins_balance AFTER INSERT ON account_profile
BEGIN
INSERT INTO balance(account_id) VALUES (NEW.account_id);
END;
但是,由于1:1
2个表与该表中的唯一列(balance
外键除外)之间存在关联balance
,所以为什么需要另一个表?
你可以有柱balance
内account_profile
:
CREATE TABLE account_profile(
account_id INTEGER PRIMARY KEY,
first_name TEXT NOT NULL,
last_name TEXT NOT NULL,
date_of_birth TEXT NOT NULL,
phone TEXT UNIQUE NOT NULL,
email TEXT UNIQUE NOT NULL,
balance REAL DEFAULT 0
);
并且无需创建触发器,从而避免了级联更新,级联删除和触发器调用的开销。
感谢你的回复!该解决方案效果很好。您的建议是有效的,但我想知道是否有可能触发这种情况,以及如何做到这一点。