sirve - Eliminar clave principal en MySQL
modificar llave primaria oracle (11)
Tengo el siguiente esquema de tabla que asigna user_customers 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 principales para user_customer_id y permission_id y conservar la clave principal 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?
"si restablece la clave 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 programa 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 programa se interrumpirá al no restaurar la propiedad de autoincrement.
Creo que Quassnoi ha respondido a tu pregunta directa. Solo una nota al margen: tal vez esta sea 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 tienes aquí es una clave principal que es un compuesto de tres campos. Por lo tanto, no puede "soltar la clave principal en una columna". Puede soltar la clave principal o no soltar la clave principal. Si desea una clave principal que solo incluya una columna, puede soltar la clave principal existente en 3 columnas y crear una nueva clave principal en 1 columna.
En caso de que tenga una clave primaria compuesta, haga lo siguiente- ALTER TABLE table_name DROP PRIMARY KEY,ADD PRIMARY KEY (col_name1, col_name2);
Encuentre la tabla en el administrador de SQL haga clic derecho y seleccione diseño, luego haga clic con el botón derecho en el ícono de la pequeña llave y seleccione quitar clave principal.
Para agregar la clave principal en la columna.
ALTER TABLE table_name ADD PRIMARY KEY (column_name);
Para eliminar la clave principal de la tabla.
ALTER TABLE table_name DROP PRIMARY KEY;
Primero haga una copia de seguridad de la base A continuación, suelte cualquier clave externa asociada con la tabla. truncar la tabla de clave foránea. Interrumpir la tabla actual. Elimine las claves principales requeridas. Use sqlyog o workbench o heidisql o dbeaver o phpmyadmin.
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 clave principal;
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 de autoincrement antes de soltar la clave:
ALTER TABLE user_customer_permission MODIFY id INT NOT NULL;
ALTER TABLE user_customer_permission DROP PRIMARY KEY;
Tenga en cuenta 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;
Tenía el mismo problema y algunos valores dentro de mi mesa. Aunque cambié mi clave principal con
ALTER TABLE
user_customer_permission CAIGA DROP PRIMARY KEY , ADD PRIMARY KEY (
id )
problema continuó en mi servidor. Creé un nuevo campo dentro de la tabla. Transferí los valores al campo nuevo y eliminé el anterior. ¡Problema resuelto!
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.
ALTER TABLE `user_customer_permission` MODIFY `id` INT;
ALTER TABLE `user_customer_permission` DROP PRIMARY KEY;