MySQL - Зробити існуюче поле унікальним


155

У мене вже є таблиця з полем, яке повинно бути унікальним, але не є. Я знаю це лише тому, що в таблицю було зроблено запис, який мав те саме значення, що й інший, вже існуючий запис, і це спричинило проблеми.

Як зробити так, щоб це поле приймало лише унікальні значення?

Відповіді:


293
ALTER IGNORE TABLE mytbl ADD UNIQUE (columnName);

Для MySQL 5.7.4 або новішої версії:

ALTER TABLE mytbl ADD UNIQUE (columnName);

Станом на MySQL 5.7.4, пункт IGNORE для ALTER TABLE видаляється, і його використання призводить до помилки.

Тож переконайтесь, що спочатку видаліть повторювані записи, оскільки ключове слово IGNORE більше не підтримується.

Довідково


62
+1 If IGNORE is specified, only the first row is used of rows with duplicates on a unique key, The other conflicting rows are deleted. Документи
The Scrum Meister

1
Чи є спосіб сказати видалити рядки на основі певних критеріїв? Або вам потрібно зробити попередню обробку перед тим, ALTERяк це зробити.
corsiKa

7
ALTER IGNOREвсе ще може призвести до дублювання помилок у версії MySQL> 5.5 та InnoDB для безпеки ваших даних. Якщо ви просто впевнені, що зберігати перший із дублюваних рядків - це правильно, спробуйте set session old_alter_table=1. Не забудьте встановити його назад. mysqlolyk.wordpress.com/2012/02/18 / ...
michaelliu

2
Якщо хтось натрапляє на це, використовуючи 5.6.7 або вище, IGNORE більше не підтримується. moredocs Я здогадуюсь, як це зробити зараз, це переконатися, що спочатку у вас немає дублікатів, ні?
Вільям Т. Маллард

1
Обов’язково зробіть резервну копію таблиці, перш ніж запустити цей запит. Він видалить усі рядки, крім першого, якщо ім'я стовпця має однакові значення або порожнє.
steady_daddy


16

Якщо ви також хочете назвати обмеження, скористайтеся цим:

ALTER TABLE myTable
  ADD CONSTRAINT constraintName 
    UNIQUE (columnName);

7

CREATE UNIQUE INDEX foo ON table_name (field_name)

Ви повинні видалити повторювані значення з цього стовпця, перш ніж виконувати цей sql. Будь-яке існуюче значення дубліката в цьому стовпці призведе до помилки 1062 mysql


4

Найпростіший і швидкий спосіб був би з таблицею структури phpmyadmin.

ВИКОРИСТОВУЙТЕ ПАНЕЛЬ АДМІНУ PHPMYADMIN!

Там це російською мовою, але в англійській версії має бути те саме. Просто натисніть кнопку Унікальна. Крім того, звідти ви можете зробити свої стовпчики ПЕРВИЧНИМ або ВИДАЛЕНО.



1

Цей код повинен вирішити нашу проблему, щоб встановити унікальний ключ для існуючої таблиці

alter ignore table ioni_groups add unique (group_name);

Але видаляє всі дублікати, включаючи ті, що знаходяться поза стовпцями
Biasi Wiga
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.