外键不匹配

时间:2014-07-31 10:03:36

标签: android sqlite android-sqlite

这是我的SQLite表结构

CREATE TABLE tbl_district (
    districtId INTEGER PRIMARY KEY not null,
    districtName TEXT unique NOT NULL
);

CREATE TABLE tbl_route (
    routeId INTEGER,
    districtId INTEGER NOT NULL REFERENCES tbl_district (districtId) ON DELETE CASCADE ON UPDATE CASCADE,
    routeName TEXT NOT NULL,
    primary key (routeId , districtId)
);

CREATE TABLE tbl_city (
    cityId INTEGER PRIMARY KEY,
    routeId INTEGER NOT NULL REFERENCES tbl_route (routeId) ON DELETE CASCADE ON UPDATE CASCADE,
    cityName TEXT NOT NULL
);

如果我执行

insert into tbl_district ( districtId, districtName) values (1,'Sri Lanka')

它可以正常工作

但如果我执行

replace into tbl_district ( districtId, districtName) values (1,'Sri Lanka')

它出现以下错误

Error while executing query: foreign key mismatch - "tbl_city" referencing "tbl_route"

有什么想法解决这个问题吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

documentation

  

父键列必须共同使用UNIQUE约束或具有UNIQUE索引。

routeId列是tbl_city中外键的父键,但没有UNIQUE约束。

(您的REPLACE语句与此没有直接关系;它恰好在数据库发生时发现错误。)