在具有默认列值的表中插入数据

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)

尝试使用插入语句#1将值插入Persons表时,出现下面显示的错误:

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

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

有人可以解释一下这是为什么吗?

4个回答

7

在你的第一条语句中,如果你省略了列名单,则必须为三个列名提供值,而你并没有这样做。这就是为什么如果你只提供其中两个值,它会失败的原因。

而你的第二条语句可能应该是:

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

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

出于这些原因,我建议始终明确指定要插入数据的列列表-不要只省略该列表并假设您正确获取了所有列.....


4

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

您可以使用DEFAULT来实现您的目的:

 INSERT INTO Persons VALUES('Bob', 20, DEFAULT);

1
真的 - 这个方法是可行的 - 但我仍然认为明确列出你要插入的列名是更好的选择。一旦有人向表中添加第四列,这种方法就会失效... - marc_s
1
是的 @marc_s,最好掌握我们正在插入的数据的控制权。我在答案中添加了DEFAULT子句,只有在您有兴趣不解释所有字段时才添加。 - corretge

2
第一个失败是因为你没有在INSERT语句中指定任何列。然后,你只提供了两个列的值,而不是所有3个,所以它不知道要将值放入哪些列中...这样是行不通的。
第二个能够工作是因为你明确说明要插入namegender,并且为每个列指定一个值。
以下代码可以工作(但我怀疑你不想在gender列中放置20):
INSERT INTO Persons(name,gender) 
values('Bob',20)

或者:

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

我猜想您实际上想要插入到age而不是gender。非常重要的是,您明确地指定要插入数据的列,以便将数据插入到正确的列中。


0
你的表格有3列 -
Name
Age
Gender

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

Raj


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接