MySQL/MariaDB如何为表中每列设置独立唯一键约束?
如何在MySQL/MariaDB中禁止单列重复的记录插入?
问题背景
我创建了如下数据表:
CREATE TABLE mytable ( ID bigint NOT NULL AUTO_INCREMENT, Caller varchar(255) NOT NULL, Name varchar(255) NOT NULL, PRIMARY KEY (ID)); ALTER TABLE `mytable` ADD UNIQUE `unique_index`(`Name`, `Caller`);
当前需求:
现在插入相同Name和Caller组合的记录会被拦截(符合预期),但我希望任何单列重复的情况也被拦截——也就是不允许表中存在相同Name的记录,也不允许存在相同Caller的记录。请问在MySQL或MariaDB中能做到吗?
解决方案
当然可以实现,你只需要给Name和Caller字段分别添加独立的唯一约束,而不是仅依赖现有的联合唯一索引。
方式一:建表时直接定义唯一约束
如果是新建表,可以在创建语句里直接给两个字段加上UNIQUE属性:
CREATE TABLE mytable ( ID bigint NOT NULL AUTO_INCREMENT, Caller varchar(255) NOT NULL UNIQUE, Name varchar(255) NOT NULL UNIQUE, PRIMARY KEY (ID));
方式二:给已存在的表添加唯一索引
像你现在的情况,表已经创建好了,就用ALTER TABLE语句分别给两个字段添加唯一索引:
-- 给Name字段添加唯一约束 ALTER TABLE `mytable` ADD UNIQUE INDEX `unique_name`(`Name`); -- 给Caller字段添加唯一约束 ALTER TABLE `mytable` ADD UNIQUE INDEX `unique_caller`(`Caller`);
添加完成后,不管你插入的是相同Name不同Caller,还是相同Caller不同Name的记录,都会触发唯一约束冲突,数据库会直接拦截这类插入操作,完全满足你的需求。
⚠️ 注意:如果你的表中已经存在单列重复的记录,执行上述添加约束的语句会失败,得先把重复数据清理掉再操作。
内容的提问来源于stack exchange,提问作者elbarna
相关产品推荐
相关产品推荐

