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