在SQLite外键中默认禁用,因此我们可能会在表中意外插入违反外键约束的行。
在此之后我们可以通过启用外键
PRAGMA foreign_keys=on
并想要检查所有
我们表中的行满足相应的约束。
怎么做?
答案 0 :(得分:2)
foreign_key_check编译指示会显示违规行为。
答案 1 :(得分:0)
如果您打算使用外键,则应在建立连接时启用外键。
但是,以下演示了一种使用NOT IN
确定无效引用的方法: -
DROP TABLE IF EXISTS main_table;
DROP TABLE IF EXISTS user_table;
CREATE TABLE IF NOT EXISTS main_table (
id INTEGER PRIMARY KEY,
user_reference INTEGER -- WOULD/COULD have REFERENCES usertable (id)
);
CREATE TABLE IF NOT EXISTS user_table (
id INTEGER PRIMARY KEY, -- REFERENCED column
user_name TEXT
);
INSERT INTO user_table VALUES
(null,'Fred'),
(null,'Bert'),
(null,'Tom')
;
INSERT INTO main_table VALUES
(null,1), -- References FRED (most likely)
(null,'not a valid reference'), -- oooops this will not reference a user
(null,2)
;
SELECT * FROM main_table
WHERE user_reference
NOT IN (
SELECT id FROM user_table
)
;
结果是: -
如果您只是想要一个指示,那么如果没有无效的引用或无效引用的数量(例如,当应用于上述时为1),则以下将返回0: -
SELECT count() FROM main_table
WHERE user_reference
NOT IN (
SELECT id FROM user_table
)
;