【问题标题】:Delete query in sqlite for child tables在sqlite中删除子表的查询
【发布时间】:2011-06-23 22:28:38
【问题描述】:

我有 3 个表,例如 Employee、Department 和 Electronics 表。

Electronics 表是 Department 表的子表,Department 表是 Employee 表的子表。

我想删除 Employee 表中的一条记录,其中 E_id=2(这是主键)这是部门表中的外键(E_id 是外键,Dept_id 是主键),Dept_id 是电子表中的外键。

首先我要删除 Electronics 表中的相关记录,然后是 Department 表,最后是 Employee 表。

请指导我如何做。

【问题讨论】:

    标签: database record sql-delete


    【解决方案1】:

    您可以在此处阅读有关 sqlite 中的外键支持的更多信息:http://www.sqlite.org/foreignkeys.html

    但你应该可以打开它:

    sqlite> PRAGMA foreign_keys = ON;
    

    然后使用删除级联设置数据库架构:

    -- Database schema
    CREATE TABLE Employee(
      E_id    INTEGER PRIMARY KEY, 
      name    TEXT
    );
    CREATE TABLE Department(
      Dept_id     INTEGER PRIMARY KEY,
      name   TEXT, 
      E_id INTEGER REFERENCES Employee(E_id) ON DELETE CASCADE
    );
    CREATE TABLE Electronics(
      Elec_id     INTEGER PRIMARY KEY,
      name   TEXT, 
      Dept_id INTEGER REFERENCES Department(Dept_id) ON DELETE CASCADE
    );
    

    所有这些都准备好并且表格中的数据:

    DELETE FROM Employee WHERE E_id = 2;
    

    【讨论】:

    • 注意:如果命令“PRAGMA foreign_keys”没有返回数据,而是返回包含“0”或“1”的单行,那么您使用的 SQLite 版本不支持外键(或者是因为它早于 3.6.19 或因为它是使用 SQLITE_OMIT_FOREIGN_KEY 或 SQLITE_OMIT_TRIGGER 定义编译的)。
    猜你喜欢
    • 1970-01-01
    • 2011-10-08
    • 2020-08-01
    • 1970-01-01
    • 2012-12-27
    • 1970-01-01
    • 2019-04-23
    • 1970-01-01
    • 2013-01-27
    相关资源
    最近更新 更多