【问题标题】:NULL vs DEFAULT NULL vs NULL DEFAULT NULL in MYSQL column creation?MYSQL 列创建中的 NULL vs DEFAULT NULL vs NULL DEFAULT NULL?
【发布时间】:2014-09-22 06:45:12
【问题描述】:

以下 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 ;

在里面看看priceDOUBLE NULL DEFAULT NULL的声明,

我通常使用:

price双空;

如果我想让该列接受 NULL 值。

那么这3种说法有什么区别呢?

  1. price双空;

  2. price双重默认空值;

  3. priceDOUBLE NULL DEFAULT NULL;

【问题讨论】:

  • 你忘记了一种可能性......price DOUBLE DEFAULT NULL NOT NULL 呢......我不是你,我实际上有一个这样定义的数据库:-)

标签: mysql sql


【解决方案1】:

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

From the CREATE TABLE documentation:

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

From the "Data Type Default Values" chapter:

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

【讨论】:

    【解决方案2】:

    在以下所有三种情况下:

    price DOUBLE NULL;
    
    price DOUBLE DEFAULT NULL;
    
    price DOUBLE NULL DEFAULT NULL;
    

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

    【讨论】:

    • "price 是 double 且不能为 null",因为第二个表达式是错误的。如果省略NULL,则假定NULL(请参阅我在手册中的引用)
    • @EJP 对我来说似乎每个陈述都是平等的。我仍然无法提取这个。 :)
    • @Sylar 他们平等的。
    猜你喜欢
    • 2011-03-14
    • 2012-09-03
    • 1970-01-01
    • 2016-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-04-15
    • 1970-01-01
    • 2021-09-12
    相关资源
    最近更新 更多