У меня есть следующая схема таблицы, которая сопоставляет user_customers с разрешениями в действующей базе данных MySQL:
mysql> describe user_customer_permission;
+------------------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+---------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_customer_id | int(11) | NO | PRI | NULL | |
| permission_id | int(11) | NO | PRI | NULL | |
+------------------+---------+------+-----+---------+----------------+
3 rows in set (0.00 sec)
Я хотел бы удалить первичные ключи для user_customer_id и permission_id и сохранить первичный ключ для id.
Когда я запускаю команду:
alter table user_customer_permission drop primary key;
Я получаю следующую ошибку:
ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key
Как удалить первичный ключ столбца?
@markb
: если вы восстановите первичный ключ, вы наверняка можете вернуть его обратноAUTO_INCREMENT
.AUTO_INCREMENT
механизм с таблицей InnoDB,AUTO_INCREMENT
столбецai_col
должен быть определен как часть индекса, чтобы можно было выполнить эквивалент индексированногоSELECT MAX(ai_col)
поиска в таблице, чтобы получить максимальное значение столбца. Обычно это достигается за счет того, что столбец становится первым столбцом некоторого индекса таблицы.Одна линия:
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` )
Вы также не потеряете автоинкремент, и вам придется повторно добавлять его, что может иметь побочные эффекты.
источник
Думаю, Квассной ответил на ваш прямой вопрос. Небольшое примечание: возможно, это просто какая-то неловкая формулировка с вашей стороны, но, похоже, у вас сложилось впечатление, что у вас есть три первичных ключа, по одному в каждом поле. Это не тот случай. По определению у вас может быть только один первичный ключ. У вас есть первичный ключ, состоящий из трех полей. Таким образом, вы не можете «поместить первичный ключ в столбец». Вы можете удалить первичный ключ или не удалять первичный ключ. Если вам нужен первичный ключ, который включает только один столбец, вы можете отбросить существующий первичный ключ в трех столбцах и создать новый первичный ключ в одном столбце.
источник
ALTER TABLE `user_customer_permission` MODIFY `id` INT; ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;
источник
Если у вас есть составной первичный ключ, сделайте вот так:
ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
источник
"если вы восстановите первичный ключ, вы наверняка можете вернуть его к AUTO_INCREMENT"
Не должно быть вопросов о том, желательно ли «восстановить свойство PK» и «восстановить свойство автоинкремента» столбца ID.
Учитывая, что это БЫЛО автоинкрементом в предыдущем определении таблицы, вполне вероятно, что существует какая-то программа, которая вставляет в эту таблицу без предоставления значения идентификатора (поскольку столбец идентификатора в любом случае автоматически увеличивается).
Работа любой такой программы будет нарушена, если свойство автоинкремента не будет восстановлено.
источник
Сначала измените столбец, чтобы удалить поле auto_increment следующим образом: изменить таблицу user_customer_permission изменить идентификатор столбца int;
Затем отбросьте первичный ключ. изменить таблицу user_customer_permission удалить первичный ключ;
источник
У меня была такая же проблема и рядом с некоторыми значениями в моей таблице. Хотя я изменил свой первичный ключ с помощью
ALTER TABLE
user_customer_permissionDROP PRIMARY KEY , ADD PRIMARY KEY (
id)
проблема продолжалась на моем сервере. Я создал новое поле внутри таблицы, я перенес значения в новое поле и удалил старое, проблема решена !!
источник
Для того, чтобы добавить первичный ключ в столбце.
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
Для того, чтобы удалить первичный ключ из таблицы.
ALTER TABLE table_name DROP PRIMARY KEY;
источник
Сначала сделайте резервную копию базы данных. Затем отбросьте любой внешний ключ, связанный с таблицей. обрезать таблицу внешнего ключа. обрезать текущую таблицу. Удалите необходимые первичные ключи. Используйте sqlyog, workbench, heidisql, dbeaver или phpmyadmin.
источник
Найдите таблицу в диспетчере SQL, щелкните ее правой кнопкой мыши и выберите дизайн, затем щелкните правой кнопкой мыши значок маленького ключа и выберите удалить первичный ключ.
источник
ALTER TABLE `table_name` ADD PRIMARY KEY( `column_name`);
источник