0

我有一个 TCL 脚本,我在其中生成一个 SQLite 表:

DB eval {CREATE TABLE StressDat2( LC int NOT NULL, EID int NOT NULL, Xtens float, Ytens float ) } 

当我尝试编写 NULL 值时,它们无论如何都会被接受。在生成表时,我如何从 Tcl 设置 ABORT 选项,该选项应处理 NULL 值的写入尝试?

4

2 回答 2

0

XtensYtens没有NOT NULL约束。(默认的冲突解决算法是ABORT;您不需要设置它。)

于 2013-09-13T09:06:54.693 回答
0

这取决于您如何将数据插入表中。如果你也用 Tcl 做,你需要注意,Tcl 不理解 NULL 值的概念。

因此,这是错误的:

set lc ""
set eid ""
set xtens ""
set utens ""
DB eval {INSERT INTO StressDat2 (LC, EID, Xtens, Ytens) VALUES ($lc, $eid, $xtens, $ytens);

您显然是在插入空字符串,而不是空值。要插入 null,请在 SQL 语句中使用 null 关键字。

这是正确的:

DB eval {INSERT INTO StressDat2 (LC, EID, Xtens, Ytens) VALUES (NULL, NULL, NULL, NULL);

最后,关于您提到的 NOT NULL 约束中的“ABORT”冲突解决。您说这在 SQLiteStudio 中是空白的,而不是您希望的“ABORT”。好吧,“ABORT”算法是sqlite在没有定义算法时使用的默认算法,所以即使你把它留空(默认),也意味着它是“ABORT”。阅读本文了解更多详情:http ://sqlite.org/lang_createtable.html

于 2013-09-19T13:36:41.043 回答