Подтвердить что ты не робот

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

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

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

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

4b9b3361

Ответ 1

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

ALTER TABLE TABLE_NAME ADD Id INT AUTO_INCREMENT PRIMARY KEY

ИЛИ

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

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

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

Ответ 2

Правильный синтаксис будет - ALTER TABLE Table_Name ADD UNIQUE (column_name)

Пример

ALTER TABLE  0_value_addition_setup ADD UNIQUE ('value_code')

Ответ 3

Мне пришлось решить подобную проблему. Я унаследовал большую исходную таблицу из 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`);

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

Ответ 4

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

PRIMARY KEY (`user_id`,`game_id`)

Ответ 5

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

Ответ 6

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

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

Ответ 7

Для MySQL:

ALTER TABLE MyTable ADD MyId INT AUTO_INCREMENT PRIMARY KEY;

Ответ 8

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