primaria - eliminar primary key mysql
Insertar la clave primaria de incremento automático a la tabla existente (10)
Estoy intentando modificar una tabla que no tiene clave principal ni columna auto_increment. Sé cómo agregar una columna de clave principal, pero me preguntaba si es posible insertar datos en la columna de la clave principal automáticamente (ya tengo 500 filas en DB y quiero darles el id pero no quiero hacerlo manualmente) . ¿Alguna idea? Muchas gracias.
¿Cómo escribir PHP para ALTERAR el campo ya existente (nombre, en este ejemplo) para convertirlo en una clave principal? Sin embargo, sin agregar ningún campo ''id'' adicional a la tabla ...
Esta es una tabla actualmente creada - Número de registros encontrados: 4 nombre VARCHAR (20) SI raza VARCHAR (30) SÍ color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
Este es un resultado final buscado (TABLA DESCRIPCIÓN) -
Número de registros encontrados: 4 nombre VARCHAR (20) NO raza PRI VARCHAR (30) SÍ color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
En lugar de obtener esto,
Número de registros encontrados: 5 id int (11) NO nombre PRI VARCHAR (20) SI raza VARCHAR (30) SÍ color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
después de intentar ...
$ query = "ALTER TABLE racehorses ADD id INT NOT NULL AUTO_INCREMENT PRIMERO, AGREGAR PRIMARY KEY (id)";
cómo conseguir esto? -
Número de registros encontrados: 4 nombre VARCHAR (20) NO raza PRI VARCHAR (30) SÍ color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
es decir, INSERTAR / AGREGAR ... etc. la clave principal EN el primer registro de campo (sin agregar un campo ''id'' adicional, como se indicó anteriormente).
Estaba enfrentando el mismo problema, así que lo que hice caí en el campo de la clave primaria, luego lo recreé y me aseguré de que sea autoincremental. Eso funcionó para mí. Espero que ayude a otros
Exporte su tabla, luego vacíe su tabla, luego agregue el campo como único INT, luego cámbielo a AUTO_INCREMENT, luego importe su tabla nuevamente que haya exportado previamente.
La forma más fácil y rápida que encuentro es esta
ALTER TABLE mydb.mytable
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);
Para aquellos como yo obteniendo un error Multiple primary key defined
intente:
ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL;
En MySQL v5.5.31, establecí la columna de id
como la clave principal para mí y llené cada fila con un valor creciente.
Pude adaptar estas instrucciones para tomar una tabla con una clave primaria existente que no se incrementa, y agregar una clave primaria incremental a la tabla y crear una nueva clave primaria compuesta con las claves antiguas y nuevas como una clave primaria compuesta usando la siguiente código:
DROP TABLE IF EXISTS SAKAI_USER_ID_MAP;
CREATE TABLE SAKAI_USER_ID_MAP (
USER_ID VARCHAR (99) NOT NULL,
EID VARCHAR (255) NOT NULL,
PRIMARY KEY (USER_ID)
);
INSERT INTO SAKAI_USER_ID_MAP VALUES (''admin'', ''admin'');
INSERT INTO SAKAI_USER_ID_MAP VALUES (''postmaster'', ''postmaster'');
ALTER TABLE SAKAI_USER_ID_MAP
DROP PRIMARY KEY,
ADD _USER_ID INT AUTO_INCREMENT NOT NULL FIRST,
ADD PRIMARY KEY ( _USER_ID, USER_ID );
Cuando se hace esto, el campo _USER_ID existe y tiene todos los valores numéricos para la clave principal exactamente como cabría esperar. Con la "DROP TABLE" en la parte superior, puede ejecutar esto una y otra vez para experimentar con las variaciones.
Lo que no he podido conseguir es la situación en la que hay KEY FOREIGN entrantes que ya apuntan al campo USER_ID. Recibo este mensaje cuando trato de hacer un ejemplo más complejo con una clave externa entrante de otra tabla.
#1025 - Error on rename of ''./zap/#sql-da07_6d'' to ''./zap/SAKAI_USER_ID_MAP'' (errno: 150)
Supongo que necesito derribar todas las claves externas antes de hacer la tabla ALTER y luego reconstruirlas después. Pero por el momento quería compartir esta solución con una versión más desafiante de la pregunta original en caso de que otros se toparan con esta situación.
Puede agregar una nueva columna de clave principal a una tabla existente, que puede tener números de secuencia, usando el comando:
ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY
Una ALTER TABLE
que agrega la columna PRIMARY KEY
funciona correctamente en mi prueba:
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
En una tabla temporal creada con fines de prueba, la instrucción anterior creó la columna de id
AUTO_INCREMENT
e insertó valores de autoincremento para cada fila existente en la tabla, comenzando con 1.
sí, algo como esto lo haría, quizás no sea el mejor, quizás quieras hacer una copia de seguridad
$get_query = mysql_query("SELECT `any_field` FROM `your_table`");
$auto_increment_id = 1;
while($row = mysql_fetch_assoc($get_query))
{
$update_query = mysql_query("UPDATE `your_table` SET `auto_increment_id`=$auto_increment_id WHERE `any_field` = ''".$row[''any_field'']."''");
$auto_increment_id++;
}
observe que el any_field
que seleccione debe ser el mismo al actualizar.
supongamos que no tiene columna para incremento automático como id, no, luego puede agregar usando la siguiente consulta:
ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
Si tiene una columna, modifique para aumentar automáticamente usando la siguiente consulta:
ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY