10

我创建了一个具有默认列值的表male

CREATE TABLE Persons 
 (name varchar(20), 
  age int, 
  sex varchar(5) default 'male')

插入语句#1:

INSERT INTO Persons values('Bob', 20)

插入语句#2:

INSERT INTO Persons(name,sex) values('Bob', 20)

当我尝试Persons使用插入语句 #1 将值插入表中时,出现如下所示的错误

列名或提供的值的数量与表定义不匹配

但是当我插入Personsusing 语句 #2 时,它成功执行。

有人可以解释为什么会这样吗?

4

4 回答 4

7

好吧,在您的声明 #1 中,如果您省略列列表,则必须为所有三列提供值,而您没有这样做。这就是如果您只提供其中两个值会失败的原因。

你的陈述#2可能应该是:

INSERT INTO Persons(name, age) values('Bob', 20)

然后您清楚地指定要插入 (nameage) 的列,并提供填充两列所需的两个值 - 这就是它起作用的原因。第三列将填充配置的默认值,因为您没有为它指定任何内容。

出于这些原因,我建议始终明确指定要向其中插入数据的列列表 - 不要只是忽略该列表并假设您得到所有​​列正确.....

于 2013-04-09T11:01:39.140 回答
4

如果不想写字段,VALUES 必须与表中的字段数相匹配。

您可以使用 DEFAULT 四个您的目的:

 INSERT INTO Persons VALUES('Bob', 20, DEFAULT);
于 2013-04-09T11:05:29.000 回答
2

第一个失败,因为您没有指定INSERT语句中的任何列。然后,您只提供两列而不是全部 3 列的值,因此它不知道将值放入哪些列...这是行不通的。

第二个有效,因为您明确声明要插入namegender并且您正在为每一列指定一个值。

以下将起作用(但我怀疑您是否希望20在该gender列中):

INSERT INTO Persons(name,gender) 
values('Bob',20)

或者:

INSERT INTO Persons(name,age) 
values('Bob',20)

我猜你实际上想要插入agenot gender。明确说明要插入数据的列非常重要,这样您就可以在正确的列中获取数据。

于 2013-04-09T11:01:52.407 回答
0

您的表格有 3 列 -

Name
Age
Gender

您已为性别设置了默认值。在查询 (1) 中,您为 3 列提供 2 个值,但没有列列表。因此错误。

拉吉

于 2013-04-09T11:02:08.017 回答