我创建了一个具有默认列值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
表中时,出现如下错误
column name or number of supplied values does not match table definition
但是当我使用语句 #2 插入 Persons
时,它成功执行。
可以解释一下为什么会发生这种情况吗?
最佳答案
那么,在语句 #1 中,如果您省略列列表,则必须为所有三列提供值,并且你没有那样做。这就是为什么如果您只提供其中两个值,它就会失败。
你的陈述 #2 可能应该是:
INSERT INTO Persons(name, age) values('Bob', 20)
然后您明确指定要插入哪些列(name
和 age
),并提供所需的两个值填充两列 - 这就是它起作用的原因。第三列将填充配置的默认值,因为您没有为其指定任何内容。
出于这些原因,我建议始终明确指定您想要插入数据的列列表 - 不要只是忽略该列表并假设您所有列都正确......
关于sql - 插入具有默认列值的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900035/