如何使用可以为空的日期在mysql中创建唯一索引
我的表上有一个唯一的索引,唯一的索引在所有4列上如何使用可以为空的日期在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更
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。