Eliminar key principal en MySQL

Tengo el siguiente esquema de tabla que asigna user_customers a permissions en una database MySQL en vivo:

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) 

Me gustaría eliminar las keys principales para user_customer_id y permission_id y conservar la key principal para id.

Cuando ejecuto el command:

 alter table user_customer_permission drop primary key; 

Obtuve el siguiente error:

 ERROR 1075 (42000): Incorrect table definition; there can be only one auto column and it must be defined as a key 

¿Cómo puedo soltar la key principal de una columna?

Sin un índice, mantener una columna de autoincremento se vuelve demasiado costosa, es por eso que MySQL requiere que una columna de autoincrement sea la parte más a la izquierda de un índice.

Debe eliminar la propiedad autoincrement antes de soltar la key:

 ALTER TABLE user_customer_permission MODIFY id INT NOT NULL; ALTER TABLE user_customer_permission DROP PRIMARY KEY; 

Tenga en count que tiene una PRIMARY KEY que cubre las tres columnas y no se garantiza que el id sea ​​único.

Si resulta ser único, puede hacer que sea PRIMARY KEY y AUTO_INCREMENT nuevamente:

 ALTER TABLE user_customer_permission MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT; 

Una línea:

 ALTER TABLE `user_customer_permission` DROP PRIMARY KEY , ADD PRIMARY KEY ( `id` ) 

Tampoco perderá el autoincremento y tendrá que volver a agregarlo, lo que podría tener efectos secundarios.

Creo que Quassnoi ha respondido a tu pregunta directa. Solo una nota al margen: tal vez esta sea solo una networkingacción incómoda de su parte, pero parece tener la printing de que tiene tres keys principales, una en cada campo. Este no es el caso. Por definición, solo puede tener una key principal. Lo que tienes aquí es una key principal que es un compuesto de tres campos. Por lo tanto, no puede "soltar la key principal en una columna". Puede soltar la key principal o no soltar la key principal. Si desea una key principal que solo incluya una columna, puede soltar la key principal existente en 3 columnas y crear una nueva key principal en 1 columna.

 ALTER TABLE `user_customer_permission` MODIFY `id` INT; ALTER TABLE `user_customer_permission` DROP PRIMARY KEY; 

"si restaura la key principal, seguramente puede revertirla a AUTO_INCREMENT"

No debe preguntarse si es o no deseable "restaurar la propiedad PK" y "restaurar la propiedad autoincrement" de la columna ID.

Dado que FUE una autoincrementación en la definición anterior de la tabla, es bastante probable que exista algún progtwig que se inserte en esta tabla sin proporcionar un valor de ID (porque la columna ID es de todos modos autoincremental).

El funcionamiento de dicho progtwig se interrumpirá al no restaurar la propiedad de autoincrement.

En caso de que tenga una key primaria compuesta, haga lo siguiente- ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);

Primero modifique la columna para eliminar el campo auto_increment como este: alter table user_customer_permission modify column id int;

Luego, suelta la tecla principal. alter table user_customer_permission drop key principal;

Tenía el mismo problema y algunos valores dentro de mi table. Aunque cambié mi key principal con

ALTER TABLE user_customer_permission CAIGA DROP PRIMARY KEY , ADD PRIMARY KEY ( id )

problema continuó en mi server. Creé un nuevo campo dentro de la tabla. Transferí los valores al campo nuevo y eliminé el anterior. ¡Problema resuelto!

Primero haga una copy de security de la base A continuación, suelte cualquier key externa asociada con la tabla. truncar la tabla de key foránea. Interrumpir la tabla actual. Elimine las keys principales requeridas. Use sqlyog o workbench o heidisql o dbeaver o phpmyadmin.