使用默认列值插入表中

Cha*_*ala 9 sql sql-server

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

CREATE TABLE Persons 
 (name varchar(20), 
  age int, 
  sex varchar(5) default 'male')
Run Code Online (Sandbox Code Playgroud)

插入声明#1:

INSERT INTO Persons values('Bob', 20)
Run Code Online (Sandbox Code Playgroud)

插入声明#2:

INSERT INTO Persons(name,sex) values('Bob', 20)
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

mar*_*c_s 7

那么,在你的陈述#1中,如果你省略列的列表,你必须所有三列提供值,而你不是这样做的.这就是为什么如果你只提供其中两个值就会失败的原因.

你的陈述#2应该是:

INSERT INTO Persons(name, age) values('Bob', 20)
Run Code Online (Sandbox Code Playgroud)

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

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