如何插入没有任何值的行,以便所有列都采用其默认值?

Phi*_*lip 27 php mysql

我需要做一些简单的事情 - 在MySQL中插入一行(使用PHP),但没有值.MySQL表已经具有所需的默认值,因此我不需要插入任何值.如果没有要插入的值,insert语句将如何显示?

nob*_*ody 49

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

  • 也可以使用 mariadb - 10.0.31-MariaDB (2认同)

Mik*_*son 11

在SQL Server中就是这样.

insert into TableName default values
Run Code Online (Sandbox Code Playgroud)


Lig*_*ica 6

正确的方法是提供一个空值列表,并让字段隐式采用它们的默认值:

INSERT INTO `table` () VALUES();
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用DEFAULT关键字:

INSERT INTO `table` (`Col1`, `Col2`, ...) VALUES(DEFAULT, DEFAULT, ...);
Run Code Online (Sandbox Code Playgroud)

或者(假设您为所有列提供值)只是:

INSERT INTO `table` VALUES(DEFAULT, DEFAULT, ...);
Run Code Online (Sandbox Code Playgroud)

所有必需的信息都可以在以下文档中找到INSERT:

如果没有为INSERT ... VALUES或INSERT ... SELECT指定列名列表,则表中每列的值必须由VALUES列表或SELECT语句提供.如果您不知道表中列的顺序,请使用DESCRIBE tbl_name查找.

[..]

如果未在严格SQL模式下运行,则任何未显式赋值的列都将设置为其默认值(显式或隐式).例如,如果指定的列列表未指定表中的所有列,则将未命名的列设置为其默认值.第10.1.4节"数据类型默认值"中描述了默认值分配.另请参见第1.8.6.2节"无效数据的约束".

[..]

使用关键字DEFAULT将列显式设置为其默认值.这使得编写INSERT语句更容易,这些语句将值分配给除了几列之外的所有列,因为它使您能够避免编写不包含表中每列的值的不完整VALUES列表.否则,您必须写出与VALUES列表中每个值对应的列名列表.

[..]

如果列列表和VALUES列表都为空,INSERT将创建一行,并将每列设置为其默认值:

INSERT INTO tbl_name () VALUES();
Run Code Online (Sandbox Code Playgroud)

[..]

在严格模式下,如果任何列没有默认值,则会发生错误.否则,MySQL对任何没有明确定义的默认值的列使用隐式默认值.