【问题标题】:Prevent duplicated row SQL [duplicate]防止重复的行 SQL [重复]
【发布时间】:2020-08-12 19:17:23
【问题描述】:

让我在当前的上下文中解释一下:

我有一个 tokens 表,其中包含两列:nametoken

例如,可以为名为“John”的用户分配“更新”令牌。

但是,我不想让两行包含“John”、“updated”。但是,可能有一行包含“Mathew”、“updated”,所以不能使用主键。

是否可以在不执行两条语句的情况下做到这一点?提前谢谢你。

【问题讨论】:

  • 您可以拥有一个由nametoken 组成的主键。
  • 您要防止插入重复行,还是要在查询表时删除重复行?

标签: java mysql sql mariadb


【解决方案1】:

您可以使用DISTINCT。例如:

select distinct name, token from tokens

DISTINCT 紧跟在SELECT 之后,适用于整行。它会删除相同的行,每个组合显示一个。

【讨论】:

    【解决方案2】:

    您正在查看的是使名称和令牌都唯一,您可以添加一行:

    unique(name, token);  
    

    或者通过这样写来使表的主键成为对(名称,令牌):

    primary key(name, token);  
    

    通过这样做,您将只接受名称和令牌的 1 个唯一行。

    【讨论】:

    • 你可能是对的。也许 OP 想防止“插入”重复行。让我们要求澄清一下。
    【解决方案3】:

    最佳解决方案是从此列创建唯一键。一个唯一键应同时应用于两列。它将防止在数据库中添加数据或更新可能导致重复的数据

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 2017-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-03-20
      相关资源
      最近更新 更多