sql—mysql数据库中的唯一列

nnsrf1az  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(345)

我面临一个问题,我不相信它可以接受一个解决方案,所以我希望如果有人知道一个解决方案,建议它,请。
我的表中有一列包含特定记录;有些记录是重复的,我想在我的表中插入一些新记录,但我希望新记录不要重复。所以,基本上我想控制数据何时可以复制,何时不能。
我试过这个,但不起作用:

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

z9smfwbn1#

有些记录是重复的,我想在我的表中插入一些新记录,但我希望新记录不要重复
约束是为了保证整个表的完整性,所以您要求的不是直接的,而是仍然可能的。
其思想是创建一个默认值为的新列 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 (...);

相关问题