SQLite 指定主键

SQLite specifying primary key

提问人:ZecosMAX 提问时间:2/5/2023 最后编辑:GMBZecosMAX 更新时间:2/5/2023 访问量:52

问:

简而言之,我有这个条款:

CREATE TABLE IF NOT EXISTS `journalData` 
(
    `JD_Key` INTEGER PRIMARY KEY AUTOINCREMENT, 
    `JD_Event_Key` INTEGER, 
    `JD_VarCount` INTEGER, 
    `JD_VarTypes` TEXT, 
    `JD_VarValues` TEXT,
    `JD_EventDate` TEXT 
);

INSERT INTO `journalData` 
VALUES (24, 0, '', '', '04.02.2023 20:26:18'); 

在 AUTOINCREMENT (https://www.sqlitetutorial.net/sqlite-autoincrement/) 的 SQLite 教程之后,它说了以下内容:

其次,在不指定列值的情况下插入另一行:person_id

INSERT INTO people (first_name,last_name)
VALUES('William','Gate');

暗示,您可以向表中添加行,而无需指定表的主键,但我收到此错误:

未捕获的错误:表 journalData 有 6 列,但提供了 5 个值

我在这里做错了什么?在提到插入之前,我尝试使用键添加单行。但是我一直收到这个错误

数据库 SQLite 语法错误 SQL-INSERT

评论


答:

1赞 ZecosMAX 2/5/2023 #1

我找到了一个解决方案,似乎错误有些误导,我必须指定列名。

但是,如果我在表中指定所有值,则没有必要指定列名,因此,在测试期间,我假设这里的语法类似于MySQL,根据我的经验,您不必指定名称在这种情况下。

所以下面的查询对我有用。

INSERT INTO `journalData` 
(JD_Event_Key, JD_VarCount, JD_VarTypes, JD_VarValues, JD_Event_Date) 
VALUES (24,0,'','','04.02.2023 20:26:18');

评论

2赞 marc_s 2/5/2023
无论如何,始终在子句中显式指定列是推荐的且公认的最佳实践 - 只要习惯了它,你甚至不会回头......INSERT INTO
0赞 ZecosMAX 2/5/2023
@marc_s,似乎很公平