Как добавить уникальный ключ к существующей таблице (с непересекающимися строками)


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

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

UPD Я искал, как можно удалить дубликаты строк mysql - я думаю, что это хорошее решение. удалить дубликаты, используя только запрос MySQL?

7 39

7 ответов:

Вы можете сделать так, как советовал янтарь

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)
Но я думаю, чтобы не потерять существующие данные, вы можете добавить столбец indentity, а затем сделать составной ключ.

ALTER TABLE 0_value_addition_setup ADD UNIQUE ( value_code )

Мне пришлось решать аналогичную задачу. Я унаследовал большую исходную таблицу от MS Access с почти 15000 записями, которые не имели первичного ключа, который я должен был нормализовать и сделать 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`);

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

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

PRIMARY KEY (`user_id`,`game_id`)

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

Установить несколько уникальных ключей в таблицу

ALTER TABLE table_name
ADD CONSTRAINT UC_table_name UNIQUE (field1,field2);

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