在MYSQL列创建中,NULL vs DEFAULT NULL vs NULL DEFAULT NULL?

Pra*_*age 19 mysql sql

下面的sql表定义说明了我的MYSQL数据库中的create table语句之一,该数据库是由我公司的前开发人员开发的.

DROP TABLE IF EXISTS `classifieds`.`category_vehicles`;
CREATE TABLE `classifieds`.`category_vehicles`(
`adv_id_ref` BIGINT UNSIGNED NOT NULL,
`category_id_ref` TINYINT UNSIGNED NOT NULL,
`forsale_status` TINYINT (1) NOT NULL,
`vehicle_type_id_ref` TINYINT UNSIGNED NOT NULL,
`price` DOUBLE NULL DEFAULT NULL,
 PRIMARY KEY (`adv_id_ref`)
) ENGINE = INNODB CHARSET = latin1 COLLATE = latin1_swedish_ci ;
Run Code Online (Sandbox Code Playgroud)

在那里看一下语句priceDOUBLE NULL DEFAULT NULL,

通常我正在使用

price DOUBLE NULL;

如果我想启用该列接受NULL值.

那么这3个陈述之间有什么区别?

1)priceDOUBLE NULL;

2)priceDOUBLE DEFAULT NULL;

3)priceDOUBLE NULL DEFAULT NULL;

非常感谢你.

a_h*_*ame 17

没有区别.NULL DEFAULT NULL是隐式默认值.

从CREATE TABLE文档:

  • 如果既未指定NULL也未指定NOT NULL,则将该列视为已指定NULL

从"数据类型默认值"一章:

  • 如果列定义不包含显式DEFAULT值,MySQL将按如下方式确定默认值:如果列可以将NULL作为值,则使用显式DEFAULT NULL子句定义该列.


use*_*421 10

price DOUBLE NULL;
Run Code Online (Sandbox Code Playgroud)

price 是一个double,可以为null,其默认值为null.

price DOUBLE DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)

price 是一个double,可以为null,其默认值为null.

price DOUBLE NULL DEFAULT NULL;
Run Code Online (Sandbox Code Playgroud)

price 是一个double,可以为null,其默认值为null.

  • @EJP 对我来说似乎每个陈述都是平等的。我仍然无法提取这个。:) (2认同)