sqlite foreign key mismatch 外键配置错误


foreign key mismatch
原来sqlite建表的时候,不会报外键约束错误,只有当你要删除的时候,才会报错误


sqlite> PRAGMA foreign_keys = ON;
设置外键级联有效;


我检查了我的建表语句,果然外键约束是错误的。

官网上是这样较我们的。

  • The parent table does not exist, or
  • The parent key columns named in the foreign key constraint do not exist, or
  • The parent key columns named in the foreign key constraint are not the primary key of the parent table and are not subject to a unique constraint using collating sequence specified in the CREATE TABLE, or
  • The child table references the primary key of the parent without specifying the primary key columns and the number of primary key columns in the parent do not match the number of child key columns.
参考: http://www.sqlite.org/foreignkeys.html

SQLite中,设置约束需要使用`FOREIGN KEY`关字。首先,确保数据库表已经创建并且主表(通常用于引用)有正确的唯一标识字段(如`id`)。下面是设置的基本步骤: 1. **创建主表** (通常是父表): ```sql CREATE TABLE parent_table ( id INTEGER PRIMARY KEY, -- 其他字段 ); ``` 2. **创建子表** (通常是依赖于父表的表) 并添加约束: ```sql CREATE TABLE child_table ( foreign_id INTEGER, other_columns, FOREIGN KEY (foreign_id) REFERENCES parent_table(id), -- 这里指定了引用的主 -- 可能还有其他约束 PRIMARY KEY (foreign_id, other_columns), ); ``` `REFERENCES parent_table(id)` 表示列`foreign_id`应引用`parent_table`中的`id`列。 3. **确保引用的完整性**: - 如果`child_table`的`foreign_id`不存在于`parent_table`中,则插入或更新操作会失败。 - 当删除`parent_table`中的记录时,除非设置了级联删除规则,否则默认情况下`child_table`中相应的记录也会被锁定(但不会自动删除,除非你在SQL语句中明确指定)。 如果你需要设置级联删除(例如,当父表的记录删除时,子表的相应记录也一起删除),可以在创建时加上`ON DELETE CASCADE`: ```sql CREATE TABLE child_table ( ... FOREIGN KEY (foreign_id) REFERENCES parent_table(id) ON DELETE CASCADE, ... ); ``` 同样,如果需要级联更新(例如,当父表的`id`改变时,子表的`foreign_id`也随之更改),则使用 `ON UPDATE CASCADE` 或者 `ON UPDATE SET NULL`(取决于具体需求)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值