Tengo el siguiente esquema de tabla que asigna usuarios_usuarios a permisos en una base de datos 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 claves primarias para user_customer_id y permission_id y conservar la clave primaria para id.
Cuando ejecuto el comando:
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 clave principal de una columna?
@markb
: si restaura la clave primaria, seguramente podrá volver a ellaAUTO_INCREMENT
.AUTO_INCREMENT
mecanismo con una tabla InnoDB, unaAUTO_INCREMENT
columnaai_col
debe definirse como parte de un índice tal que es posible llevar a cabo el equivalente de un indexadoSELECT MAX(ai_col)
de búsqueda en la tabla para obtener el valor máximo de columna. Por lo general, esto se logra haciendo que la columna sea la primera columna de algún índice de tabla.Una línea:
Tampoco perderá el incremento automático y tendrá que volver a agregarlo, lo que podría tener efectos secundarios.
fuente
Creo que Quassnoi ha respondido tu pregunta directa. Solo una nota al margen: tal vez esta es solo una redacción incómoda de su parte, pero parece tener la impresión de que tiene tres claves principales, una en cada campo. Este no es el caso. Por definición, solo puede tener una clave principal. Lo que tiene aquí es una clave primaria que es un compuesto de tres campos. Por lo tanto, no puede "soltar la clave primaria en una columna". Puede soltar la clave principal o no soltar la clave principal. Si desea una clave primaria que solo incluya una columna, puede soltar la clave primaria existente en 3 columnas y crear una nueva clave primaria en 1 columna.
fuente
fuente
En caso de que tenga una clave primaria compuesta, haga esto:
ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
fuente
"si restaura la clave primaria, seguramente puede volver a restaurarla a AUTO_INCREMENT"
No debe haber dudas sobre si es deseable "restaurar la propiedad PK" y "restaurar la propiedad de incremento automático" de la columna ID.
Dado que era un autoincremento en la definición previa de la tabla, es muy probable que exista algún programa que se inserte en esta tabla sin proporcionar un valor de ID (porque la columna ID es un autoincrement de todos modos).
La operación de cualquier programa de este tipo se interrumpirá al no restaurar la propiedad de aumento automático.
fuente
Primero modifique la columna para eliminar el campo auto_increment de esta manera: alter table user_customer_permission modify column id int;
Luego, suelte la clave principal. alter table user_customer_permission soltar clave primaria;
fuente
fuente
Tuve el mismo problema y al lado de algunos valores dentro de mi tabla. Aunque cambié mi clave primaria con
ALTER TABLE
DROP PRIMARY KEY , ADD PRIMARY KEY (
ID de permiso de usuario_cliente)
El problema continuó en mi servidor. ¡Creé un nuevo campo dentro de la tabla, transfirí los valores al nuevo campo y eliminé el viejo, problema resuelto!
fuente
Para agregar clave principal en la columna.
Para eliminar la clave primaria de la tabla.
fuente
Primero haga una copia de seguridad de la base de datos. Luego suelte cualquier clave externa asociada con la tabla. truncar la tabla de clave externa. Truncar la tabla actual. Elimine las claves primarias requeridas. Utilice sqlyog o workbench o heidisql o dbeaver o phpmyadmin.
fuente
Busque la tabla en el Administrador de SQL, haga clic con el botón derecho y seleccione diseño, luego haga clic con el botón derecho en el icono de la pequeña llave y seleccione eliminar la clave principal.
fuente