sqlite3 Null外键不能通过.import接受

时间:2017-07-05 04:37:45

标签: sql import sqlite

我试图用一些数据填充数据库,这个特定的外键可以存在还是空的(空?)。因此,这就是我正在使用的:

PRAGMA foreign_keys=on;

CREATE TABLE TABLE1(t1 text NOT NULL, t2 text NOT NULL, fl1 float NOT NULL,
nullable_fk text NULL,
PRIMARY KEY (t1, t2), FOREIGN KEY (nullable_fk ) REFERENCES PARENT_TABLE(nullable_fk )
ON DELETE CASCADE ON UPDATE NO ACTION);

CREATE TABLE PARENT_TABLE(nullable_fk text NOT NULL, var integer, PRIMARY KEY (nullable_fk));
INSERT INTO PARENT_TABLE(nullable_fk, integer) VALUES ("asd", 123);

CREATE TABLE AUX_TABLE(t1 text NOT NULL, PRIMARY KEY (t1));
INSERT INTO AUX_TABLE(t1) VALUES ("bla");

INSERT INTO TABLE1(t1, t2, fl1, nullable_fk) VALUES ("bla", "bla", 1.1, NULL);

这很好用。但是,如果我尝试导入,它将失败:

File being imported (file name test.txt):
"ble"^"646"^0.170^NULL

Commands being used:
.separator ^
.import test.txt TABLE1

RESULT -> test.txt:1: INSERT failed: FOREIGN KEY constraint failed

如果之后我尝试使用文件中的值进行 INSERT INTO ,它将正常工作。

有谁知道 .import 命令有什么问题?

谢谢!

编辑:我从其他网页上看到导入NULL的内容无法使用CSV文件,这是我尝试做的事情,建议是设置一个值在那里,然后更新。但是,由于外键必须存在于另一个表(PARENT_TABLE)中,所以正确的方法是创建一个"临时垃圾条目"在PARENT_TABLE中,使用它代替NULL键,将键更新为NULL,然后从PARENT_TABLE中删除此条目?

有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

.import导入文本文件,因此不可能有NULL值:你得到一个空字符串,或者字符串" NULL"如果你想拼出来的话。

您可以将文件导入temporary表,调整任何错误的'在那里的值,然后复制到实际的表。

或者,您可以暂时disable foreign key checking