You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLite3银行管理数据库:插入账户时自动生成余额行的实现咨询

解决方案:用SQLite触发器实现自动插入关联行

当然可行!在SQLite中,你可以通过**触发器(Trigger)**来实现这个需求——当你向account_profile表插入新账户记录时,自动触发操作在balance表中生成对应account_id的行,完全不需要手动执行两次插入操作。

修改后的完整建表脚本

-- 创建账户信息表
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 
); 

-- 创建余额表
CREATE TABLE balance( 
    account_id INTEGER PRIMARY KEY, 
    balance REAL DEFAULT 0, 
    FOREIGN KEY (account_id) 
        REFERENCES account_profile (account_id) 
        ON UPDATE CASCADE 
        ON DELETE CASCADE 
);

-- 创建触发器:插入账户后自动生成对应余额记录
CREATE TRIGGER after_account_insert
AFTER INSERT ON account_profile
FOR EACH ROW
BEGIN
    -- 插入新的余额行,account_id使用刚插入的账户ID,balance默认取0
    INSERT INTO balance(account_id) VALUES(NEW.account_id);
END;

关键说明

  • 触发器after_account_insert的触发时机是AFTER INSERT ON account_profile,意味着只有当account_profile表成功插入一条记录后,才会执行触发器里的逻辑。
  • FOR EACH ROW表示每插入一行账户记录,就执行一次触发器操作。
  • NEW.account_id代表刚插入到account_profile表中的那条记录的account_id值,不管你是让SQLite自动生成自增ID,还是手动指定account_id插入,这个值都会正确获取到。
  • 因为balance表的balance字段已经设置了DEFAULT 0,所以插入时只需要指定account_id即可,余额会自动设为0。

这样一来,当你执行类似INSERT INTO account_profile(first_name, last_name, date_of_birth, phone, email) VALUES ('John', 'Doe', '1990-01-01', '1234567890', 'john@example.com');的插入语句时,SQLite会自动在balance表中生成一条对应account_id的记录,余额默认是0。

内容的提问来源于stack exchange,提问作者Nownuri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:29:13