Warm tip: This article is reproduced from serverfault.com, please click

sqlite-在SQLite3中使用Forein键将行插入不同的表中

(sqlite - Inserting rows into different tables using forein key in SQLite3)

发布于 2020-11-29 09:04:44

我正在为我的银行管理程序创建一个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创建一行。

可能吗?如果是这样,我应该如何修改第一个代码块?

Questioner
Nownuri
Viewed
11
forpas 2020-11-29 17:24:09

你需要一个AFTER INSERT trigger

CREATE TRIGGER ins_balance AFTER INSERT ON account_profile
BEGIN 
  INSERT INTO balance(account_id) VALUES (NEW.account_id);
END;

但是,由于1:12个表与该表中的唯一列(balance外键除外)之间存在关联balance,所以为什么需要另一个表?
你可以有柱balanceaccount_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
);

并且无需创建触发器,从而避免了级联更新,级联删除和触发器调用的开销。