为了账号安全,请及时绑定邮箱和手机立即绑定

UNIQUE KEY可以为NULL,但是NULL只能有一个,为什么我的结果和这个不一样

我创建了一个表t3

| t3    | CREATE TABLE `t3` (

  `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT,

  `username` varchar(20) DEFAULT NULL,

  `test` varchar(20) DEFAULT NULL,

  PRIMARY KEY (`id`),

  UNIQUE KEY `username` (`username`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

+-------+---------------------------------

username是UNIQUE KEY,老师设置的是NOT NULL 我没有设置,默认为可以为NULL, 然后我插入了两次,只插入了第三个字段test,,都成功了,看一下结果,发现username字段可以为NULL,而且是多次为NULL,是哪里出了问题了呢,老师不是说为了保证唯一性,UNIQUE KEY约束只能有一个NULL吗

mysql> INSERT t3(test) VALUES('a');

Query OK, 1 row affected (0.00 sec)


mysql> select * from t3;

+----+----------+------+

| id | username | test |

+----+----------+------+

|  1 | NULL     | a    |

+----+----------+------+

1 row in set (0.00 sec)


mysql> INSERT t3(test) VALUES('b');

Query OK, 1 row affected (0.00 sec)


mysql> select * from t3;

+----+----------+------+

| id | username | test |

+----+----------+------+

|  1 | NULL     | a    |

|  2 | NULL     | b    |

+----+----------+------+

2 rows in set (0.00 sec)


正在回答

1 回答

查询表结构,你会发现username可以为空,而你没给username赋值,所以它默认为null。这里的唯一性是说你不能插入相同的值,并不是null

0 回复 有任何疑惑可以回复我~
#1

无悔欲 提问者

我又看了一遍,有一句话是即使你存储了多个值,但最后只保留一个空值,意思就是虽然我存储了很多个NULL,但其实值存储了一个。
2017-09-13 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
与MySQL的零距离接触
  • 参与学习       396886    人
  • 解答问题       3353    个

本课程涵盖全部MySQL数据库的基础,学习MySQL数据库的基础知识

进入课程

UNIQUE KEY可以为NULL,但是NULL只能有一个,为什么我的结果和这个不一样

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信