Estoy tratando de alterar una tabla que no tiene una clave principal ni una columna de autoincremento. Sé cómo agregar una columna de clave principal, pero me preguntaba si es posible insertar datos en la columna de clave principal automáticamente (ya tengo 500 filas en la base de datos y quiero darles la identificación, pero no quiero hacerlo manualmente) . ¿Alguna idea? Muchas gracias.
mysql
primary-key
Gato volador
fuente
fuente
alter table
para agregar la clave, pero MySQL no generará ID para los campos que aún no los tienen. Tendrá que actualizar manualmente los campos existentes y luego asegurarse de que su nuevo auto_increment comience en el desplazamiento correcto: el valor predeterminado es '1' y de todos modos terminará con errores de clave duplicados.Respuestas:
Una
ALTER TABLE
declaración que agrega laPRIMARY KEY
columna funciona correctamente en mis pruebas:En una tabla temporal creada para fines de prueba, la instrucción anterior creó la
AUTO_INCREMENT
id
columna e insertó valores de incremento automático para cada fila existente en la tabla, comenzando con 1.fuente
FIRST
por ejemplo,ALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST;
LAST_INSERT_ID()
ese valorSELECT * FROM table_name WHERE id = LAST_INSERT_ID()
y la mayoría de las API de lenguaje de programación ofrecen alguna función / método para devolver ese valor en el código de la aplicación.supongamos que no tiene una columna para el incremento automático como id, no, entonces puede agregar usando la siguiente consulta:
Si tiene una columna, modifique el incremento automático mediante la siguiente consulta:
fuente
FIRST
al final?id
columna sea la primera en la tabla en lugar de la última, que es el comportamiento predeterminado.sí, algo como esto lo haría, aunque quizás no sea lo mejor, quizás quieras hacer una copia de seguridad
any_field
tenga en cuenta que el que seleccione debe ser el mismo al actualizar.fuente
Para aquellos como yo obteniendo un
Multiple primary key defined
error, intente:En MySQL v5.5.31, esto estableció la
id
columna como la clave principal para mí y completó cada fila con un valor incremental.fuente
Lo más fácil y rápido que encuentro es esto
fuente
Pude adaptar estas instrucciones: tomar una tabla con una clave primaria sin incremento existente , agregar una clave primaria incremental a la tabla y crear una nueva clave primaria compuesta con las claves antiguas y nuevas como clave principal compuesta usando lo siguiente código:
Cuando se hace esto, el campo _USER_ID existe y tiene todos los valores numéricos para la clave primaria exactamente como cabría esperar. Con la "TABLA DE GOTAS" en la parte superior, puede ejecutar esto una y otra vez para experimentar con variaciones.
Lo que no he podido hacer funcionar es la situación en la que hay CLAVES EXTRANJERAS entrantes que ya apuntan al campo USER_ID. Recibo este mensaje cuando intento hacer un ejemplo más complejo con una clave externa entrante de otra tabla.
Supongo que necesito eliminar todas las claves foráneas antes de hacer la tabla ALTER y luego reconstruirlas después. Pero por ahora quería compartir esta solución con una versión más desafiante de la pregunta original en caso de que otros se encontraran con esta situación.
fuente
Exporte su tabla, luego vacíela, luego agregue el campo como INT único, luego cámbielo a AUTO_INCREMENT, luego importe nuevamente su tabla que exportó anteriormente.
fuente
Puede agregar una nueva columna de Clave primaria a una tabla existente, que puede tener números de secuencia, usando el comando:
fuente
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IDENTITY' at line 1
Estaba enfrentando el mismo problema, así que lo que hice eliminé el campo para la clave principal, luego lo recreé y me aseguré de que sea incremental automático. Eso funcionó para mí. Espero que ayude a otros
fuente
ALTER TABLE tableName MODIFY tableNameID MEDIUMINT NOT NULL AUTO_INCREMENT ;
Aquí tableName es el nombre de su tabla,
tableName es el nombre de su columna que es primaria tiene que modificarse
MEDIUMINT es un tipo de datos de su clave primaria existente
AUTO_INCREMENT tiene que agregar solo auto_increment después de que no sea nulo
Hará que esa clave primaria aumente automáticamente ......
Espero que esto sea útil :)
fuente
¿Cómo escribir PHP para ALTERAR el campo ya existente (nombre, en este ejemplo) para convertirlo en una clave primaria? W / o, por supuesto, agregando cualquier campo 'id' adicional a la tabla.
Esta es una tabla creada actualmente - Número de registros encontrados: 4 nombre VARCHAR (20) SÍ raza VARCHAR (30) SÍ color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
Este es un resultado final buscado (DESCRIPCIÓN DE LA TABLA) -
Número de registros encontrados: 4 nombre VARCHAR (20) NO PRI raza 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 PRI name VARCHAR (20) YES raza VARCHAR (30) YES color VARCHAR (20) YES peso SMALLINT (7) YES
después de intentarlo ..
$ query = "ALTERAR TABLA caballos de carreras AGREGAR ID INT NO NULO AUTO_INCREMENT PRIMERO, AGREGAR CLAVE PRIMARIA (id)";
¿Cómo conseguir esto? -
Número de registros encontrados: 4 nombre VARCHAR (20) NO PRI raza VARCHAR (30) SÍ color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
es decir, INSERT / ADD ... etc., la clave primaria EN el primer registro de campo (sin agregar un campo 'id' adicional, como se indicó anteriormente.
fuente