mysql - 如何不允许在数据库中复制特定值

标签 mysql sql unique-key

所以我想创建列让我们说 master_user,所以这个 master_user 列有位值,0 和 1。我想要实现的是使列 master_user 只有一个“1”值,因为只有一个 master_user。您可以有多个“0”值,但不能有“1”。

在 SQL Server 中,您可以这样做:

CREATE UNIQUE NONCLUSTERED INDEX [IX_master_user] ON [user]
(
    [master_user] ASC
)
WHERE ([master_user]=(1));

我如何为 MySQL 做同样的事情?

谢谢。

更新:MySQL 不支持过滤索引和条件索引

最佳答案

最简单的方法可能是使用 1 指定主用户,使用 null 指定非主用户。由于 null 不是值(它们是缺少值),它们不参与唯一索引,并且在 master_user 上有一个简单的 unique 索引 列就可以了。

如果您绝对必须保留 0,则可以添加一个生成的列,将 0 替换为 null 并使其唯一,以达到相同的效果:

CREATE TABLE users (
  username VARCHAR(10) PRIMARY KEY,
  master_user BIT NOT NULL,
  master_user_nullable BIT AS (CASE master_user WHEN 1 THEN 1 END) STORED UNIQUE
);

关于mysql - 如何不允许在数据库中复制特定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54663424/

相关文章:

MYSQL如何安全删除UNIQUE KEY?需要注意什么?

mysql - INSERT ... ON DUPLICATE KEY(什么都不做)

mysql - 如何让 'system'命令在mysql中不可用

当我运行相同的查询时,php mysql 导致打印的表与我在 mysql admin 中得到的结果不匹配

python - Django模型: creating small value fixed point

python - 基于python中的文件内容创建唯一键

PHP - 限制登录用户访问管理页面

mysql - 一个表中有两个索引,仅在 where 子句中使用的第二个索引值得吗?

sql - 如何在Oracle中计数后选择最大值?

sql - 如何在单个 POSTGRESQL 查询中获取列名及其引用类型(即 PRIMARY KEY 和 FOREIGN KEY)?