我的一张桌子上有一栏。它是可选的,因此可以留空。但是,如果为该列提供了值,则该值必须是唯一的。两个问题:
答案 0 :(得分:4)
只需在列上使用UNIQUE
索引即可。参见:
http://dev.mysql.com/doc/refman/5.1/en/create-index.html
UNIQUE索引创建约束 这样索引中的所有值都必须 与众不同。如果你发生错误 尝试添加具有键值的新行 与现有行匹配。对全部 引擎,UNIQUE索引允许 列的多个NULL值 可以包含NULL。如果你指定一个 UNIQUE中列的前缀值 index,列值必须是 在前缀中唯一。
答案 1 :(得分:2)
它可以为null(而不是空白)且唯一。默认值可以为null。对我来说没有问题。
答案 2 :(得分:1)
您可以在表上创建UNIQUE索引。在MySQL工作台中,它是创建/编辑表时的UQ复选框。
答案 3 :(得分:0)
第1步,ALTER
表格和MODIFY
字段,以便允许NULL
。
ALTER TABLE my_table MODIFY my_field VARCHAR(100) NULL DEFAULT NULL;
第2步,在字段上添加UNIQUE
索引。
ALTER TABLE my_table ADD UNIQUE INDEX U_my_field (my_field);
使用起来很好 - 我唯一的犹豫是将UNIQUE
索引放在可以为空的字段上,乍一看它有点反直觉。
答案 4 :(得分:0)
1)将列移动到新表,使其唯一且不可为空。现在,只有当你有一个值时,你才可以在这个新表中有一行。
2)是的。密钥的键和依赖关系是关系数据库设计中数据完整性的基础。如果一个属性应该是唯一的,那么它应该被实现为一个键。可以为空的“密钥”根本不是密钥,无论如何都不是必需的,因为它总是可以移动到新表并且不可为空而不会丢失任何信息。