提问者:小点点

mysql数据库中的唯一列


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

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

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

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`)

共1个答案

匿名用户

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

约束的目的是保证整个表的完整性,因此您所要求的并不是直接的,而是仍然可能的。

其思想是创建一个新列,该列的默认值为1,然后使用row_number()(在MySQL8.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的记录已经存在,则unique约束会引发错误。

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