Удаление уникального ограничения из таблицы MySQL


Ответы:


345

Уникальным ограничением является также индекс.

Сначала используйте, 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: Я забыл упомянуть: вы должны изменить tbl_name и index_name на имя вашей фактической таблицы и имя фактического индекса, соответственно. Вы можете увидеть имена в MySQL Query Browser. Вы также можете сделать SHOW CREATE TABLE tbl_name.
Марк Байерс

Сообщение об ошибке: «У вас есть ошибка в синтаксисе SQL; обратитесь к руководству, соответствующему вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '(player_id, year, турнир)' в строке 1»
Анкур Мукерджи,

1
@ Ankur Mukherjee: Способ, который я предложил, по моему мнению, лучший способ сделать это.
Марк Байерс

1
Я где-то прочитал вопрос, используя phpMyAdmin ... Ответ, предоставленный @systemovich, должен быть помечен как принятый.
Пере

123

Вы можете DROPсоздать уникальное ограничение из таблицы, используя phpMyAdmin, как показано в таблице ниже. Уникальное ограничение было наложено на поле Wingspan. В этом случае имя ограничения совпадает с именем поля.

альтернативный текст


34
Важно отметить, что секция индексов по умолчанию свернута и расширена небольшой тонкой ссылкой шрифтом 12px, где секция находится на скриншоте. Но благодаря тебе я нашел это. Благослови свое лицо. +1
Джек,

11

Индексы , способные размещения уникального ключа ограничения на таблице, PRIMARYи UNIQUEиндексы.

Чтобы удалить ограничение уникального ключа для столбца, но сохранить индекс, вы можете удалить и заново создать индекс с типом INDEX.

Обратите внимание, что для всех таблиц рекомендуется помечать индекс PRIMARY.


2
Проголосовал, потому что @thomasrutter коснулся того факта, что удаление уникального ограничения может отрицательно повлиять на производительность запроса - и это можно уменьшить, заменив UNIQUEиндекс регулярным INDEX.
Алекс

4

Чтобы добавить ограничение UNIQUE с помощью phpmyadmin, перейдите к структуре этой таблицы, найдите ниже и щелкните по ней,

введите описание изображения здесь

Чтобы удалить ограничение UNIQUE, аналогичным образом, перейдите к структуре и прокрутите вниз до вкладки индексов, найдите ниже и нажмите drop, введите описание изображения здесь

Надеюсь, это работает.

Наслаждаться ;)


это решение было именно то, что я искал.
Арье Бейтц

2

Для WAMP 3.0: щелкните «Структура под добавлением 1 столбца», и вы увидите «- Индексы». Нажмите «Индексы» и удалите тот индекс, который вам нужен.


2

Если вы хотите удалить уникальные ограничения из таблицы базы данных mysql, используйте alter table с drop index.

Пример:

создать таблицу unique_constraints (unid int, имя_операции varchar (100), CONSTRAINT activty_uqniue UNIQUE (имя_ действия), первичный ключ (unid));

alter table unique_constraints drop index activty_uqniue;

Где activty_uqniue это ограничение уникальности для ACTIVITY_NAME столбца.


0

при отбрасывании уникального ключа мы используем индекс

ALTER TABLE tbl
DROP INDEX  unique_address;

0

Ограничение может быть снято с помощью синтаксиса:

ALTER TABLE

Начиная с 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 demo


-3

мое имя таблицы - покупатели, у которых есть уникальный столбец ограничений emp_id, теперь я собираюсь отбросить emp_id

Шаг 1: exec sp_helpindex покупателей, смотрите файл изображения

шаг 2: скопировать адрес индекса

введите описание изображения здесь

шаг 3: изменить ограничение удаления покупателей таблицы [UQ__buyers__1299A860D9793F2E] изменить столбец удаления покупателей таблицы emp_id

нота:

Blockquote

вместо покупателей поменяйте его на название вашей таблицы :)

Blockquote

вот и все имя столбца 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`);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.