多列唯一键允许多行

时间:2012-02-23 19:22:17

标签: mysql sql

我有一个包含4列的MySQL表

Column  Type        Null  Default
----------------------------------
id      int(11)     No    None     AUTO_INCREMENT
col1    int(11)     No    None
col2    int(11)     No    None
col3    varchar(20) Yes   Null

我用col1,col2,col3创建了一个索引,因为我不想要重复的行。我理解NULL值被认为是不同的,因此表接受重复的行。

什么是最好的选择,所以我可以为col1,col2,col3设置唯一值的行?

3 个答案:

答案 0 :(得分:1)

您可以在NOT NULL上设置col3并将默认值设置为''

答案 1 :(得分:1)

我被教导理解NULL的方式是NULL是状态而不是值。所以你实际上没有NULL的明确值。我实际上会考虑使用空字符串而不是NULL或设置其他默认值。

答案 2 :(得分:0)

如果您希望数据库强制执行它,则没有那么多选项。因为你不能强迫数据库考虑NULL,除了你可以之外的任何东西;

  • 使用列中的空字符串而不是NULL。如果“”是有效值并且您希望它与实际的NULL值不同,这只会导致麻烦。
  • 使用列中的空字符串而不是NULL,并添加一个指示NULL值的布尔列。将它添加到唯一索引,数据库将“假NULL”与空字符串分开。

这两个选项都要求您将col3设置为NOT NULL并在insert / select上进行一些值映射。