gpt4 book ai didi

MySQL 复合键允许单个默认记录

转载 作者:行者123 更新时间:2023-11-30 00:05:58 25 4
gpt4 key购买 nike

我有一个这样的表:

ID  UserID  Country IsDefault
1 7 90 0
2 7 93 0
3 7 95 1
4 7 88 0

5 8 34 0
6 8 55 1
7 8 27 0
8 8 12 0

ID 是主键。UserID 来自用户表。 CountryID 来自国家表。 IsDefault 显示哪个国家/地区是用户的默认国家/地区。

使用复合键的 UserId 是否可以只允许一个 isDefault = 1?IE。 UserId = 7 的组合应该只有一个 IsDefault = 1 的实例。UserId 7 的所有其他实例都应该有 isDefault 0。UserId 8 也是如此,它应该只有一个默认国家/地区。

最佳答案

您正在寻找的内容称为部分索引(SQL Server中的过滤索引),但是MySQL不支持它们,即另一个数据库中的以下内容(这不会在 MySQL 中工作)

CREATE UNIQUE INDEX yourIndexNameHere
ON yourTableNameHere (UserID)
WHERE IsDefault=1;

您的选择如下

  1. 创建一个触发器,在 INSERT 和 UPDATE 语句之前执行,以处理您的唯一约束,即通过将该 UserID 的所有其他行的 IsDefault 设置为 0(此可以进行优化,即忽略 UPDATE 中当前正在更新的行,仅更新 IsDefault 实际上为 1 的位置)(如 Fabricator 的建议)
  2. 在用户表中添加一个 DefaultCountry 列来存储此信息(按照 wils484 的建议)
  3. 使用与 MySQL 不同的数据库。 SQL Server、PostgreSQL 和 SQLite 都能够支持部分索引

关于MySQL 复合键允许单个默认记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24545528/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com