SQLite建表时如何为单个外键同时配置多个约束?
SQLite合并外键约束实现方案
你只需要将ON DELETE CASCADE属性和原有延迟约束属性合并到同一个外键定义语句中即可,二者属于同一外键的不同配置项,无需拆分定义。
合并后的完整外键约束写法
CONSTRAINT "model" FOREIGN KEY("category_id") REFERENCES "category"("id") ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED
完整表重建操作步骤
SQLite修改表约束必须通过重建表实现,操作流程如下:
- 首先开启事务并临时关闭外键检查,避免操作过程中触发校验报错:
PRAGMA foreign_keys = OFF; BEGIN TRANSACTION; - 按照调整后的约束创建新表,示例:
CREATE TABLE your_table_new ( -- 此处填写你原表的其余字段定义 category_id INTEGER, CONSTRAINT "model" FOREIGN KEY("category_id") REFERENCES "category"("id") ON DELETE CASCADE DEFERRABLE INITIALLY DEFERRED ); - 导入原表数据到新表:
INSERT INTO your_table_new SELECT * FROM your_table; - 删除原表,重命名新表为原表名称:
DROP TABLE your_table; ALTER TABLE your_table_new RENAME TO your_table; - 最后提交事务并重新开启外键检查:
COMMIT; PRAGMA foreign_keys = ON;
注意:操作前请务必备份原表数据,避免操作失误导致数据丢失。
内容的提问来源于stack exchange,提问作者Peter Lakatos
相关产品推荐
相关产品推荐

