2013-03-06 4 views
31

Я хочу добавить сложный уникальный ключ в существующую таблицу. Ключ содержит 4 поля (user_id, game_id, дата, время). Но таблица имеет уникальные строки. Я понимаю, что я могу удалить все повторяющиеся даты и после этого добавить сложный ключ.Как добавить уникальный ключ к существующей таблице (без строк uniques)

Возможно, существует другое решение без поиска всех повторяющихся данных. (например, добавить уникальный игнор и т. д.).

UPD Я искал, как можно удалить повторяющиеся строки mysql - я думаю, что это хорошее решение. Remove duplicates using only a MySQL query?

+1

Вы не можете иметь дубликаты, если вы создаете уникальный ключ. – Tchoupi

ответ

75

Вы можете сделать как ЯНТАРЬ

посоветовал
ALTER TABLE TABLE_NAME ADD Id INT IDENTITY(1,1) PRIMARY KEY 

ИЛИ

Вы можете добавить ограничение

ALTER TABLE TABLE_NAME ADD CONSTRAINT constr_ID UNIQUE (user_id, game_id, date, time) 

Но я думаю не теряйте существующие данные, вы можете добавить столбец отступов, а затем создать составной ключ.

+0

Что такое колонка IDENTITY? Я не могу найти ссылку на него в документе, кроме того, что связано с AUTO_INCREMENT: http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – challet

+1

Как упоминалось в @challet ключевое слово в MySQL НЕ ИДЕНТИФИКАЦИЯ, кроме AUTO_INCREMENT. http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html – MER

2

Либо создайте идентификатор автоинкремента или идентификатор UNIQUE и добавьте его в естественный ключ, о котором вы говорите, с 4 полями. это сделает каждую строку в таблице уникальной ...

3

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

PRIMARY KEY (`user_id`,`game_id`) 
+0

Нет, это не для меня. – yAnTar

7

Мне пришлось решить аналогичную проблему. Я унаследовал большую исходную таблицу из MS Access с почти 15 000 записей, у которых не было первичного ключа, что я должен был нормализовать и сделать CakePHP совместимым. Одно соглашение CakePHP состоит в том, что каждая таблица имеет первичный ключ, который является первым столбцом и что он называется «id». Следующее простое утверждение сделал трюк для меня под MySQL 5.5:

ALTER TABLE `database_name`.`table_name` 
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT FIRST, 
ADD PRIMARY KEY (`id`); 

Это добавлен новый столбец «идентификатор» типа целого числа перед существующими данными («FIRST» ключевое слово). Ключевое слово AUTO_INCREMENT увеличивает идентификаторы, начиная с 1. Теперь каждый набор данных имеет уникальный числовой идентификатор. (Без оператора AUTO_INCREMENT все строки заполняются id = 0).

0

Остерегайтесь просто добавления ключа UNIQUE, поскольку он принимает более одного значения NULL.

4

ALTER TABLE 0_value_addition_setup ADD UNIQUE ( value_code )

+6

Хотя этот код может помочь решить проблему, он не объясняет _why_ и/или _how_, он отвечает на вопрос. Предоставление этого дополнительного контекста значительно улучшит его долгосрочную образовательную ценность. Пожалуйста, отредактируйте свой ответ, чтобы добавить объяснение, включая ограничения и допущения. –