我有一个这样的表:ID UserID Country IsDefault1 7 90 02 7 93 03 7 95 14 7 88 05 8 34 06 8 55 17 8 27 08 8 12 0ID是主键。UserID来自用户表。 CountryID来自国家/地区表。 IsDefault显示哪个国家/地区是用户的默认国家/地区。使用复合密钥是否可以仅对UserId允许一个isDefault = 1?即组合的UserId = 7应该只具有一个IsDefault = 1的实例。UserId 7的所有其他实例应该具有isDefault0。UserId 8的情况也应该只有一个默认国家/地区。 最佳答案 您要查找的内容称为部分索引(SQL服务器中的过滤索引),但是MySQL不支持它们,即另一个数据库中的以下内容(在MySQL中不起作用)CREATE UNIQUE INDEX yourIndexNameHereON yourTableNameHere (UserID)WHERE IsDefault=1;您的选择如下创建一个触发器以在可以处理您唯一约束的INSERT和UPDATE语句之前执行,即通过将该IsDefault的所有其他行的UserID设置为0(可以进行优化,即忽略,并且仅在UPDATE实际上为1的地方进行更新)(由Fabricator建议)在用户表中添加一个IsDefault列来存储此信息(如wils484所建议)使用与MySQL不同的数据库。 SQL Server,PostgreSQL和SQLite能够支持部分索引 10-08 16:24