sql - 插入具有默认列值的表

标签 sql sql-server

我创建了一个具有默认列值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)

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

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

关于sql - 插入具有默认列值的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15900035/

相关文章:

mySQL SELECT 使用 LEFT JOIN,返回值或 NULL WHERE 列在右表中指定

mysql - 单个sql查询中同一字段的等于、不等于条件

sql - 如何执行存储在 varchar 变量中的数学表达式

仅当列的所有值都匹配时才更新表的 SQL 查询

mysql - AFTER INSERT 触发器和 INSERT IGNORE/ON DUPLICATE KEY 更新

php - WooCommerce 小部件 - 从日期到日期的订单列表

sql - 对 SQL Server 执行计划进行基准测试以进行自动化测试?

SQL Server : compare only month and day - SARGable

asp.net - Entity Framework MVC 页面加载缓慢

sql-server - 返回日期为 null 作为 t-sql 中的最大值