Sqlite3-BLOB上的外键不匹配
我正在使用外键,不幸的是,在下面的情况下,我无法解决不匹配的问题。。。我错过了什么?TEBLE由以下人员创建:Sqlite3-BLOB上的外键不匹配,sqlite,foreign-keys,Sqlite,Foreign Keys,我正在使用外键,不幸的是,在下面的情况下,我无法解决不匹配的问题。。。我错过了什么?TEBLE由以下人员创建: CREATE TABLE IF NOT EXISTS `devices` ( `guid` BLOB NOT NULL, `device_name` TEXT NOT NULL, `class` INTEGER NOT NULL ); CREATE TABLE IF NOT EXISTS `device_states` ( `guid_d`
CREATE TABLE IF NOT EXISTS `devices` (
`guid` BLOB NOT NULL,
`device_name` TEXT NOT NULL,
`class` INTEGER NOT NULL
);
CREATE TABLE IF NOT EXISTS `device_states` (
`guid_d` BLOB NOT NULL,
`id_d` TEXT DEFAULT NULL,
`tp` INTEGER NOT NULL,
`state` INTEGER NOT NULL,
`note` TEXT DEFAULT NULL,
`status` INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY(`guid_d`,`tp`),
FOREIGN KEY(`guid_d`) REFERENCES devices ( `guid` ) ON DELETE RESTRICT
);
CREATE INDEX IF NOT EXISTS idx_ds_tp ON device_states(`tp`);
INSERT OR IGNORE INTO `devices` VALUES (x'438D6E77DC3946A4819617ADBA18ADB2','guid_door', 1);
选择波纹管按预期工作:
SELECT * FROM `devices` WHERE guid = x'438D6E77DC3946A4819617ADBA18ADB2';
1从以下位置返回的行:从设备中选择*其中guid=x'438D6E77DC3946A4819617ADBA18ADB2';(耗时1毫秒)
然而,当我尝试将数据插入到设备表时,我得到了错误
INSERT INTO device_states (guid_d, id_d, tp, state, note, status)
VALUES (x'438D6E77DC3946A4819617ADBA18ADB2', "D", 132456, 1, "door open", 2);
外键不匹配-“设备状态”引用“设备”:插入
进入设备状态(guid、id、tp、状态、注释、状态)值
(x'438D6E77DC3946A4819617ADBA18ADB2',“D”,132456,1,“门打开”,2)
有人看到这个问题了吗???非常感谢 报告说:
通常,外键约束的父键是父表的主键。如果它们不是主键,则父键列必须共同受唯一约束或具有唯一索引
对guid
没有这样的约束