Измените живой стол, чтобы сделать ключ неуникальным - PullRequest
14 голосов
/ 10 ноября 2010

Я видел некоторые другие вопросы, связанные с этим, но они не были MySQL.

База данных - это живая база данных, поэтому я не хочу удалять и воссоздавать таблицу.Я просто хочу сделать столбец более не уникальным, который по своей природе менее разрешительный, поэтому он не должен вызывать никаких проблем.

Ответы [ 3 ]

29 голосов
/ 10 ноября 2010

Если ваш столбец был определен как уникальный с помощью предложения UNIQUE, используйте:

ALTER TABLE mytable DROP INDEX constraint_name

или, если ваше ограничение было неявно названо,

ALTER TABLE mytable DROP INDEX column_name

Если он был определенуникально, используя предложение PRIMARY KEY, используйте:

ALTER TABLE mytable DROP PRIMARY KEY

Обратите внимание, однако, что если ваша таблица InnoDB, удаление PRIMARY KEY приведет к неявному воссозданию вашей таблицы и перестройке всех индексов, чтозаблокировать стол и сделать его недоступным в течение довольно длительного времени.

4 голосов
/ 01 декабря 2017

Это инструкции для приложения phpmyadmin (если вы используете phpMyAdmin) ::

В некоторых случаях разработчик (вы) может не захотеть удалить его, а просто изменить «уникальность» на «not-unique ".

Шаги:

  1. Перейти к таблице в контексте, где вы хотите внести изменения

  2. Нажмите на вкладку «Структура» (в основном рядом с «Обзор»)

  3. Найдите ссылку «+ Индексы» прямо под столбцами.Да ... теперь нажмите на нее
  4. Теперь вы можете увидеть все «Индексы» и теперь вы можете нажать на кнопку «DROP» или ссылку для изменения.

Ответ найденздесь: Источник: https://forums.phpfreaks.com/topic/164827-phpmyadmin-how-to-make-not-unique/

1 голос
/ 10 ноября 2010

Просто DROP уникальный индекс.У не должно быть проблем с тем, что это живая БД.Если это действительно большая таблица, вы можете временно заблокировать некоторые запросы во время удаления индекса.Но это должно произойти, только если вы добавляете индекс.

ALTER TABLE table_name DROP INDEX index_name;
...