Как добавить уникальный ключ к существующей таблице (с неидентичными строками)
Я хочу добавить сложный уникальный ключ к существующей таблице. Ключ содержит 4 поля (user_id
, game_id
, date
, time
). Но в таблице есть не уникальные строки. Я понимаю, что могу удалить все повторяющиеся даты и после этого добавить сложный ключ.
Возможно существует другое решение без поиска всех дублирующих данных. (например, добавить уникальный игнорировать и т.д.).
UPD Я искал, как можно удалить дубликаты строк MySQL - я думаю, что это хорошее решение. Удалить дубликаты, используя только запрос MySQL?
Ответы
Ответ 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.