Mysql 外键约束示例

CREATE TABLE QianChuan (

ID INTEGER PRIMARY KEY AUTOINCREMENT,

UserID TEXT,

NickName TEXT,

LoginUserName TEXT,

LoginUserID TEXT

);

CREATE TABLE QianChuanDetail (

ID INTEGER PRIMARY KEY AUTOINCREMENT,

UserID TEXT,

Consume NUMERIC,

Date INTEGER,

StartTime INTEGER,

EndTime INTEGER,

FOREIGN KEY (

UserID

)

REFERENCES QianChuan (UserID) ON DELETE CASCADE

);

[09:54:17] 从表 QianChuan 中删除行时发生错误:foreign key mismatch - "QianChuanDetail" referencing "QianChuan"

出现 "foreign key mismatch" 错误的原因是 SQLite 在验证外键关系时发现了不匹配,通常是由于以下原因:

父表QianChuan中的UserID列不是主键或唯一索引

外键定义与父表的对应列不匹配

在你的表结构中,QianChuan表的主键是ID,而QianChuanDetail表却引用了UserID作为外键,而UserID并不是QianChuan表的主键或唯一约束列,这就是导致错误的原因。

要修复这个问题,你需要修改外键关系,让它引用父表的主键,或者为QianChuan.UserID添加唯一约束:

解决方案 1:让外键引用父表的主键

sql

CREATE TABLE QianChuan (

ID INTEGER PRIMARY KEY AUTOINCREMENT,

UserID TEXT,

NickName TEXT,

LoginUserName TEXT,

LoginUserID TEXT

);

CREATE TABLE QianChuanDetail (

ID INTEGER PRIMARY KEY AUTOINCREMENT,

QianChuanID INTEGER, -- 改为引用父表的ID

Consume NUMERIC,

Date INTEGER,

StartTime INTEGER,

EndTime INTEGER,

FOREIGN KEY (QianChuanID)

REFERENCES QianChuan (ID) ON DELETE CASCADE

);

解决方案 2:为父表的 UserID 添加唯一约束

sql

CREATE TABLE QianChuan (

ID INTEGER PRIMARY KEY AUTOINCREMENT,

UserID TEXT UNIQUE, -- 添加唯一约束

NickName TEXT,

LoginUserName TEXT,

LoginUserID TEXT

);

CREATE TABLE QianChuanDetail (

ID INTEGER PRIMARY KEY AUTOINCREMENT,

UserID TEXT,

Consume NUMERIC,

Date INTEGER,

StartTime INTEGER,

EndTime INTEGER,

FOREIGN KEY (UserID)

REFERENCES QianChuan (UserID) ON DELETE CASCADE

);

选择哪种方案取决于你的数据模型设计。通常推荐第一种方案,让外键引用父表的主键,这是更规范的做法。

文件名精灵2025年最新版 机器翻译 AI智能
...
批量修改文件名称、文件夹名称

免费使用 功能无限制

全面接入机器自动翻译功能,主流AI大模型智能改名

方便快捷,支持正则表达式、无需安装功能齐全、支持定制无广告、无插件,放心使用。

免费下载
本站中所有的计算器的计算结果仅供参考,本站对此结果的准确性不承担任何责任,实际数额以银行/保险公司/国家相关机构确认的结果为准。
在线客服QQ:543690914,备案号: 苏ICP备15037649号-27。东海县白塔埠镇佳诚电脑经营部版权所有。