DB2插入到具有标识列的表中

DB2插入到具有标识列的表中,db2,primary-key,sql-insert,Db2,Primary Key,Sql Insert,我目前正试图通过shell脚本自动化DB2数据库,但插入操作似乎有问题 我创建的表如下所示: CREATE TABLE "TRAINING1" (ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (STARTS WITH 1 INCREMENT BY 1), F1 VARCHAR(20) NOT NULL, name VARCHAR(40) NOT NULL, surname VARCHAR(40) NOT NULL, CONSTRAINT pk_

我目前正试图通过shell脚本自动化DB2数据库,但插入操作似乎有问题

我创建的表如下所示:

CREATE TABLE "TRAINING1"
(ID INTEGER NOT NULL GENERATED ALWAYS AS IDENTITY (STARTS WITH 1 INCREMENT BY 1),
F1 VARCHAR(20) NOT NULL,
name VARCHAR(40) NOT NULL,
surname VARCHAR(40) NOT NULL,
CONSTRAINT pk_train1_id primary key(ID));
现在,对于所有类似的表,创建工作正常,但当我尝试插入数据时:

db2 "insert into TRAINING1 values ('hello', 'world', 'foo', 'bar')"
我得到这个错误:

SQL0117N The number of values assigned is not the same as the number 
of specified or implied columns or variables. SQLSTATE=42802
SQL0798N A value cannot be specified for column "ID" which is defined 
as GENERATED ALWAYS. SQLSTATE=428C9
据我所知,我指定的主键应该自动生成值,并且不能显式地为其分配值。出于好奇,我这样做了:

db2 "insert into TRAINING1 values (1, 'hello', 'world', 'foo', 'bar')"
然后它会抱怨这个错误:

SQL0117N The number of values assigned is not the same as the number 
of specified or implied columns or variables. SQLSTATE=42802
SQL0798N A value cannot be specified for column "ID" which is defined 
as GENERATED ALWAYS. SQLSTATE=428C9
我对DB2还是相当陌生,但几乎一周后,我仍然没有找到任何解决方案。 我正在64位Ubuntu虚拟机上运行DB2 Express Edition。 你有没有想过为什么要这么做


谢谢

要跳过
INSERT
语句中的列,必须指定不被跳过的列:


db2“在TRAINING1(f1,name,姓氏)值中插入('hello'、'world'、'foo')”

但这不是很直观吗?对于许多其他SQL应用程序,无需显式列出要填充的列。DB2在这方面不同吗?@ZenadiaGroenewald-如果不列出列,它怎么知道要填充哪些列?即使当您提供所有列时,实际填充的列可能会令您吃惊——如果在中间某个地方添加一个新列,并且类型仍然兼容,则数据可能会出现在奇怪的地方。您应该始终为插入列出列,即使您给出了所有列,以避免任何此类意外。您为插入列出了4个字符的列,但表中只有3个字符的列。