Добавьте еще один первичный ключ к таблице в MySQL - PullRequest
0 голосов
/ 09 января 2012

Я хочу добавить еще один первичный ключ к таблице в MySQL.Я использую phpmyadmin для связи с сервером MySQL.Когда я щелкаю по первичному значку для нужного поля, появляется сообщение об ошибке:

# 1075 - неверное определение таблицы;может быть только один автоматический столбец, и он должен быть определен как ключ

Отредактировано:

вот запрос:

ALTER TABLE `files` DROP PRIMARY KEY ,ADD PRIMARY KEY ( `file_type` ) 

Как я могу это сделать?

Ответы [ 5 ]

6 голосов
/ 09 января 2012

Как следует из названия «первичный» ключ, может быть только один из них (ref: Highlander).

То, что вы можете попробовать, - это УНИКАЛЬНЫЙ КЛЮЧ, который для большинства действует как первичныйpurpouses.Авто_инкремент, по-видимому, не выполняет какую-либо цель, если используется второй раз - какой смысл в двух полях, несущих абсолютно одинаковую информацию?

3 голосов
/ 09 января 2012

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

CREATE TABLE track(
  album CHAR(10),
  disk INTEGER,
  posn INTEGER,
  song VARCHAR(255),
  PRIMARY KEY (album, disk, posn)
)

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

0 голосов
/ 10 апреля 2015

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

ALTER TABLE Персоны ДОБАВИТЬ УНИКАЛЬНЫЕ (P_Id)

0 голосов
/ 12 октября 2012

Вы можете пометить все поля, которые вы хотите в качестве первичных ключей, в том числе существующее.Система внутренне отбросит существующую и установит все помеченные вами.

0 голосов
/ 09 января 2012

В сообщении об ошибке говорится, я думаю:

столбец auto_increment должен быть ключевым.

Поэтому сначала используйте этот запрос:

ALTER TABLE 'files' CHANGE 'id' 'id' INT( 10 ) UNSIGNED NOT  NULL;

это удалит auto_increment.

Кроме того, я рекомендую Uniqe ключ, как подсказывает другой ответ. Я считаю, что в каждой таблице всегда (почти) должен быть столбец Id.

...