Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用可以为空的日期在mysql中创建唯一索引_Mysql - Fatal编程技术网

如何使用可以为空的日期在mysql中创建唯一索引

如何使用可以为空的日期在mysql中创建唯一索引,mysql,Mysql,我的表上有一个唯一的索引,唯一的索引在所有4列上 firstname VARCHAR NOT NULL lastname VARCHAR NOT NULL dateofbirth DATE NULL reference VARCHAR NULL 从我读到的(以及最近发现的)内容来看,mysql并没有对空值的列强制执行唯一性 在我的例子中,firstname和lastname区域总是填充的,但dateofbirth和reference是可选的,默认设置为null 我已将引用列从NULL更

我的表上有一个唯一的索引,唯一的索引在所有4列上

 firstname VARCHAR NOT NULL
 lastname VARCHAR NOT NULL
 dateofbirth DATE NULL
 reference VARCHAR NULL
从我读到的(以及最近发现的)内容来看,mysql并没有对空值的列强制执行唯一性

在我的例子中,firstname和lastname区域总是填充的,但dateofbirth和reference是可选的,默认设置为null


我已将引用列从NULL更改为NOT NULL默认值“”,但如何在不实际将列类型更改为VARCHAR的情况下对出生日期执行相同操作?

您可以为日期设置默认值:

ALTER TABLE tablename MODIFY dateofbirth DATE NOT NULL DEFAULT '0000-00-00';
执行此操作将生成一个警告,您可以忽略该警告:

第xyz行“dateofbirth”列的数据被截断 更改后,以前为
NULL
的所有值现在都设置为新的默认值


或者,找到另一列,该列将始终填写,并且可以区分两个名字和姓氏相同的人。

您是否正在尝试创建一个复合索引,即FirstName+LastName+Birthdate?或者只是生日?这个问题在写的时候没有意义。在允许为空的列上创建索引应该没有问题:@juergend这个链接是我试图避免的。我希望每一行都是唯一的,因为NULL将被视为1个值,而2行将被视为NULL。NULL值将导致重复的约束错误。这就是为什么我在默认情况下将引用转换为blank而不是null,就像reference一样。将“出生日期”列更改为非空默认值“0000-00-00”。只允许一个人不设置出生日期有什么意义?谢谢@Jack。我很懒,希望有另一种解决方案,因为现在我需要检查并更改很多sql,这样我的报表就不会到处都是0000-00-00。