我创建了一个默认列值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)
当我尝试使用insert语句#1将值插入Persons
表时,我收到如下错误
列名或提供的值数与表定义不匹配
但是当我使用语句#2插入Persons
时,它成功执行。
有人可以解释一下为什么会这样吗?
答案 0 :(得分:7)
那么,在你的陈述#1中,如果你省略列的列表,你必须为所有三个列提供值,并且你不是那样做的。如果你只提供其中两个值,那就是失败的原因。
你的陈述#2应该是:
INSERT INTO Persons(name, age) values('Bob', 20)
然后您明确指定要插入哪些列(name
和age
),并且您提供填充两列所需的两个值 - 这是它为何有效。第三列将填充配置的默认值,因为您没有为其指定任何内容。
由于这些原因,我建议始终明确指定要插入数据的列的列表 - 不要只是省略该列表而假设你'让所有专栏正确.....
答案 1 :(得分:3)
如果您不想写字段,VALUES必须与表格中的字段数相匹配。
您可以使用DEFAULT四个目的:
INSERT INTO Persons VALUES('Bob', 20, DEFAULT);
答案 2 :(得分:2)
第一个失败是因为您没有在INSERT
语句中指定任何列。然后,您只提供两列而不是全部3列的值,因此它不知道将值放入哪些列...这不会起作用。
第二个有效,因为您明确声明要插入name
和gender
并且您为每列指定一个值。
以下内容有效(但我怀疑您希望20
列中有gender
):
INSERT INTO Persons(name,gender)
values('Bob',20)
或者:
INSERT INTO Persons(name,age)
values('Bob',20)
我猜你真的想插入age
而不是gender
。明确说明要将数据插入哪些列非常重要,以便在右列中获取数据。
答案 3 :(得分:0)
您的表格有3列 -
Name
Age
Gender
您已为性别设置了默认值。在查询(1)中,您为3列提供2个值,而没有列列表。因此错误。
拉吉