【问题标题】:Unique Column in mysql databasemysql数据库中的唯一列
【发布时间】:2020-07-02 13:02:04
【问题描述】:

我面临一个问题,我不相信它可以接受解决方案,所以我希望如果有人知道解决方案,请提出建议。

我的表中有一列包含某些记录;其中一些记录是重复的,我想在我的表中插入一些新记录,但我希望新记录不被重复。所以,基本上我想控制什么时候可以复制数据,什么时候不能复制。

我试过了,但它不起作用:

ALTER TABLE MyTable DROP PRIMARY KEY

ALTER TABLE MyTable
ADD PRIMARY KEY (`S.No`),
ADD UNIQUE KEY `PCID_uk` (`PCID`),
ADD UNIQUE KEY `USERNAME_uk` (`USERNAME`)

【问题讨论】:

  • 请先向我们展示现有表的架构
  • 你能提供一个更完整的例子吗? CREATE TABLE 语句、任何 ALTER TABLE 语句和一组产生错误结果的 INSERT 语句确实有助于证明您要描述的内容。
  • 请提供几行样本数据。我们无法真正清楚地了解您的情况。

标签: mysql sql sql-insert unique-constraint


【解决方案1】:

其中一些记录是重复的,我想在我的表中插入一些新记录,但我希望新记录不要重复

约束旨在保证整个表的完整性,因此您要求的不是直截了当的,但仍然可能。

这个想法是创建一个默认值为1 的新列,然后使用row_number()(在 MySQL 8.0 中可用)提供它。假设您的表的主键是 id,并且您希望在列 col 上强制执行部分唯一性,则如下所示:

alter table mytable add col_rn int default 1;

update mytable t
inner join (
    select id, row_number() over(partition by col order by id) rn
    from mytable
) t1 on t1.id = t.id
set t.col_rn = t.rn;

有了这个设置,您可以创建以下唯一约束

alter table mytable add constraint unique_col_rn unique (col, col_rn);

现在您可以在表中插入新记录,而不是为 col_rn 提供值,因此默认为 1。如果 col 的记录已存在,则唯一约束会引发错误。

insert into mytable (col) values (...);

【讨论】:

    猜你喜欢
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多