MySQL中栏位定义的NULL, NOT NULL, NOT NULL DEFAULT

执行结果演示以MySQL 8为准

  • NULL: 可以输入null, 也可以输入该栏位定义格式的值
  • NOT NULL: 不可以输入null, 只能输入该栏位格式定义的值
  • NOT NULL DEFAULT 'defualt_value': 不可以输入null, 默认值是defualt_value(DDL语句必须加单引号).

我们来测试一下NOT NULL定义的栏位的执行结果:

  1. 先看 NOT NULL带DEFUALT的:
CREATE TABLE `test`.`t2`(
    id int unsigned not null auto_increment,
    `gender` varchar(10) NOT NULL DEFAULT '0',
     PRIMARY KEY(`ID`)
) ENGINE=InnoDB;

插入null值:

INSERT INTO `test`.`t2`(id, `gender`)VALUES(1, null);
-- 结果: Error Code: 1048. Column 'gender' cannot be null

执行结果肯定是失败, 这个与我们预期的一样.

sql里面不包含这个NOT NULL的栏位呢?

INSERT INTO `test`.`t2`(`name`)VALUES('aben');

执行结果是插入成功, 但是有warning:

1 row(s) affected, 1 warning(s): 1364 Field 'gender' doesn't have a default value

  1. 有NOT NULL但是不带DEFAULT的
CREATE TABLE `test`.`t3`(
    id int unsigned not null,
    `gender` varchar(10) NOT NULL,
     PRIMARY KEY(`id`)
) ENGINE=InnoDB;

插入null数据肯定是报错的, 这点毋庸置疑.

INSERT INTO `test`.`t3`(id,`gender`)VALUES(1,null);
-- 结果: Error Code: 1048. Column 'gender' cannot be null

sql里面不包含这个NOT NULL的栏位呢?

INSERT INTO `test`.`t3`(id)VALUES(2);

执行结果是插入成功, 但是有warning:

1 row(s) affected, 1 warning(s):  1364 Field 'gender' doesn't have a default value

我们可以看到这个栏位的值是一个 empty string, 这个值与栏位类型有关.

如果NOT NULL的栏位类型换成int, 那就是0了:

CREATE TABLE `test`.`t4`(
    id int unsigned not null,
    `age` int NOT NULL,
     PRIMARY KEY(`id`)
) ENGINE=InnoDB;
INSERT INTO `test`.`t4`(id)VALUES(2);
SELECT * FROM `test`.`t4`;
1 row(s) affected, 1 warning(s):  1364 Field 'gender' doesn't have a default value

MySQL的这个特性, 与我记忆中的SQLServer是不一样的.

MySQL中null值占一个bit, 而empty string不占空间

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值