从MySQL表中删除唯一约束


Answers:


344

唯一约束也是索引。

首先使用SHOW INDEX FROM tbl_name来查找索引的名称。索引的名称存储在该key_name查询结果中调用的列中。

然后,您可以使用DROP INDEX

DROP INDEX index_name ON tbl_name

ALTER TABLE语法:

ALTER TABLE tbl_name DROP INDEX index_name

1
抱歉,先生,我在提出问题之前已经尝试过,但无法正常工作
Ankur Mukherjee 2010年

@Ankur Mukherjee:我忘了提及:您必须分别将tbl_name和index_name更改为实际表的名称和实际索引的名称。您可以在MySQL查询浏览器中看到名称。您也可以SHOW CREATE TABLE tbl_name
Mark Byers 2010年

错误消息:“您的SQL语法有错误;请在与MySQL服务器版本相对应的手册中找到在第1行'(player_id,year,tournament)'附近使用的正确语法”
Ankur Mukherjee 2010年

1
@Ankur Mukherjee:我认为建议的方法是最好的方法。
Mark Byers 2010年

1
使用phpMyAdmin在问题中的某处阅读... @systemovich提供的答案应标记为已接受。
2014年

123

您可以按照要求使用phpMyAdminDROP从表中获得唯一约束,如下表所示。在Wingspan字段上放置了一个唯一约束。在这种情况下,约束的名称与字段名称相同。

替代文字


34
重要的是要注意,索引部分默认情况下是折叠的,并由12px字体的细小链接扩展,该部分位于屏幕快照中。但是多亏了你,我才找到了它。保佑你的脸。+1
杰克

11

能够在表上放置唯一键约束的索引为PRIMARYUNIQUE索引。

要删除列的唯一键约束但保留索引,可以使用type删除并重新创建索引INDEX

请注意,对所有表都标记一个索引是一个好主意PRIMARY


1
由于@thomasrutter提到删除唯一约束可能会对查询性能产生不利影响这一事实而受到支持 -可以通过用UNIQUE常规索引替换索引来缓解这种情况INDEX
2014年

4

要使用phpmyadmin添加UNIQUE约束,请转到该表的结构并在下面找到并单击,

在此处输入图片说明

要删除UNIQUE约束,请以相同的方式,转到结构并向下滚动直到Indexes Tab,然后在下面找到并单击drop, 在此处输入图片说明

希望这行得通。

请享用 ;)


这个解决方案正是我想要的。
Aryeh Beitz

2

对于WAMP 3.0:单击“添加1列”下面的“结构”,您将看到“-索引”。单击“-索引”并删除所需的任何索引。


2

如果要从mysql数据库表中删除唯一约束,请使用带有drop index的alter table。

例:

创建表unique_constraints(unid int,activity_name varchar(100),CONSTRAINT activty_uqniue UNIQUE(activity_name),主键(unid));

alter table unique_constraints drop index activty_uqniue;

其中activty_uqniue是对activity_name列的唯一约束。


0

在删除唯一键的同时,我们使用索引

ALTER TABLE tbl
DROP INDEX  unique_address;

0

可以使用以下语法删除约束:

更改表

从MySQL 8.0.19开始,ALTER TABLE允许使用更通用(和SQL标准)的语法来删除和更改任何类型的现有约束,其中约束类型由约束名称确定: ALTER TABLE tbl_name DROP CONSTRAINT symbol;

例:

CREATE TABLE tab(id INT, CONSTRAINT unq_tab_id UNIQUE(id));

-- checking constraint name if autogenerated
SELECT * FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = 'tab';

-- dropping constraint
ALTER TABLE tab DROP CONSTRAINT unq_tab_id;

db <> fiddle演示


-3

我的表名是Buyer,它具有唯一约束列emp_id,现在我要删除emp_id

步骤1:exec sp_helpindex买家,请参阅图片文件

步骤2:复制索引地址

在此处输入图片说明

第三步:更改表购买者放置约束[UQ__buyers__1299A860D9793F2E]更改表购买者放置列emp_id

注意:

块引用

而不是买家将其更改为您的表格名称:)

块引用

那就是所有带有约束的列名emp_id都被删除了!


-5
  1. 第一个删除表

  2. 去SQL

使用此代码:

CREATE  TABLE service( --tablename 
  `serviceid` int(11) NOT NULL,--columns
  `customerid` varchar(20) DEFAULT NULL,--columns
  `dos` varchar(30) NOT NULL,--columns
  `productname` varchar(150) NOT NULL,--columns
  `modelnumber` bigint(12) NOT NULL,--columns
  `serialnumber` bigint(20) NOT NULL,--columns
  `serviceby` varchar(20) DEFAULT NULL--columns
)
--INSERT VALUES
INSERT INTO `service` (`serviceid`, `customerid`, `dos`, `productname`, `modelnumber`, `serialnumber`, `serviceby`) VALUES
(1, '1', '12/10/2018', 'mouse', 1234555, 234234324, '9999'),
(2, '09', '12/10/2018', 'vhbgj', 79746385, 18923984, '9999'),
(3, '23', '12/10/2018', 'mouse', 123455534, 11111123, '9999'),
(4, '23', '12/10/2018', 'mouse', 12345, 84848, '9999'),
(5, '546456', '12/10/2018', 'ughg', 772882, 457283, '9999'),
(6, '23', '12/10/2018', 'keyboard', 7878787878, 22222, '1'),
(7, '23', '12/10/2018', 'java', 11, 98908, '9999'),
(8, '128', '12/10/2018', 'mouse', 9912280626, 111111, '9999'),
(9, '23', '15/10/2018', 'hg', 29829354, 4564564646, '9999'),
(10, '12', '15/10/2018', '2', 5256, 888888, '9999');
--before droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  unique`modelnumber` (`modelnumber`),
  ADD  unique`serialnumber` (`serialnumber`),
  ADD unique`modelnumber_2` (`modelnumber`);
--after droping table
ALTER TABLE `service`
  ADD PRIMARY KEY (`serviceid`),
  ADD  modelnumber` (`modelnumber`),
  ADD  serialnumber` (`serialnumber`),
  ADD modelnumber_2` (`modelnumber`);
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.