如何在SQL表中插入默认值?

Zbi*_*iak 64 t-sql default insert

我有这样一张桌子:

create table1 (field1 int,
               field2 int default 5557,
               field3 int default 1337, 
               field4 int default 1337)
Run Code Online (Sandbox Code Playgroud)

我想插入一个具有field2和field4默认值的行.

我已经尝试insert into table1 values (5,null,10,null)但它不起作用ISNULL(field2,default)也不起作用.

当我插入行时,如何告诉数据库使用列的默认值?

gbn*_*gbn 133

最好的做法是列出您的列,这样您就可以独立于表更改(新列或列顺序等)

insert into table1 (field1, field3)  values (5,10)
Run Code Online (Sandbox Code Playgroud)

但是,如果您不想这样做,请使用DEFAULT关键字

insert into table1 values (5, DEFAULT, 10, DEFAULT)
Run Code Online (Sandbox Code Playgroud)

  • 真棒!这正是我所寻找的.注意:您还可以指定列和值,传递DEFAULT而不是NULL,如果存在DEFAULT约束,您将获得默认值;如果列可以为空且未指定默认约束,则为NULL. (9认同)
  • 这_确实_工作,但是当我尝试使用`(CASE WHEN This = That THEN 'SpecifiedValue' ELSE DEFAULT END)`时,它_不_工作,这让我很懊恼。我仍然必须准备多个 Insert-Statement 来涵盖我的所有场景,或者使用 Dynamic-SQL。:( (2认同)

aro*_*oth 70

只是不要在insert语句中包含要使用默认值的列.例如:

INSERT INTO table1 (field1, field3) VALUES (5, 10);
Run Code Online (Sandbox Code Playgroud)

......将采取默认值field2field4,并分配到5 field1和10 field3.

  • @Danon - OP 声明“我想插入具有 field2 和 field4 的默认值的行”,并询问“当我插入一行时,如何告诉数据库使用该列的默认值?”。你是正确的,这个答案不包括默认值_未_定义的情况,但是由于问题明确_不_询问这种情况,将答案描述为不完整并不准确。你在谈论一个完全不同的问题(最好作为一个单独的问题提出)。 (3认同)
  • 如果列未定义默认值并且也设置为“NOT ALLOW NULLS”怎么办? (2认同)

ino*_*non 27

最好的方法是:

insert your_table
default values
Run Code Online (Sandbox Code Playgroud)

  • 如果所有列都具有关联的默认值,并且不想指定列名,则此方法有效. (3认同)
  • 尽管这不一定是所提问题的完整答案,但您无意中回答了我的问题,因此,谢谢您:) (2认同)

Chr*_*ris 8

我有一个例子,我有一个非常简单的表,我基本上只是想要一个额外的行,其中只有默认值。不确定是否有更漂亮的方法,但这是一种方法:

这会将新行中的每一列设置为其默认值:

INSERT INTO your_table VALUES ()
Run Code Online (Sandbox Code Playgroud)

注意:这对于 MySQL INSERT INTO your_table DEFAULT VALUES 不起作用的地方特别有用。


fke*_*ber 5

试试吧

INSERT INTO table1 (field1, field3) VALUES (5,10)
Run Code Online (Sandbox Code Playgroud)

然后field2和field4应该有默认值.