在 SQLite3 中使用外键将行插入到不同的表中

Inserting rows into different tables using forein key in SQLite3

我正在为我的银行管理程序制作一个 sqlite3 数据库。为了创建 tables,我使用了以下脚本。

  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...); 

我希望在余额 table 中创建一行 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;

但是,由于 2 table 之间存在 1:1 关系,并且 table balance 中唯一的列除了外键外,是 balance,为什么还需要另一个 table?
您可以在 account_profile:

中包含 balance
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
);

并且无需创建触发器,您可以避免级联更新、级联删除和调用触发器的开销。