Estoy tratando de 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.Insertar incremento automático de la clave principal en la tabla existente
Respuesta
Un ALTER TABLE
declaración añadiendo la columna PRIMARY KEY
funciona correctamente en mis pruebas:
ALTER TABLE tbl ADD id INT PRIMARY KEY AUTO_INCREMENT;
En una tabla temporal creada para propósitos de prueba, la declaración anterior creados los valores de incremento automático AUTO_INCREMENT
id
columna y insertados para cada existente fila de la tabla, comenzando con 1.
Sí, esta ha sido mi experiencia. Nunca recuerde tener que ejecutar un script separado para rellenar los identificadores de auto_increment ... –
lol..Gracias. mi error. La marca verde es para usted, ya que la suya es más fácil de implementar en ese momento. : D – FlyingCat
+1, funciona en 5.1.51-ndb-7.1.9a-log, en la tabla con el motor MyISAM –
sí, algo como esto lo haría, podría no ser la mejor, sin embargo, es posible que 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.
bueno. Gracias. – FlyingCat
Para aquellos que como yo conseguir una oportunidad Multiple primary key defined
error:
ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST NOT NULL;
En MySQL v5.5.31 este conjunto de la columna de la id
como la clave principal para mí y poblada cada fila con un valor incremental.
supongamos que usted no tiene la columna de incremento automático como ID, que no, entonces puede agregar utilizando la consulta siguiente:
ALTER TABLE table_name ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
Si la columna hemos, a continuación, modificar a incremento automático usando siguiente consulta:
ALTER TABLE table_name MODIFY column_name datatype(length) AUTO_INCREMENT PRIMARY KEY
¿Qué hace el 'FIRST' al final? – Dementic
Hará que la nueva columna 'id' sea la primera en la tabla en lugar de la última, que es el comportamiento predeterminado. –
El más fácil y rápida que encuentro es este
ALTER TABLE mydb.mytable
ADD COLUMN mycolumnname INT NOT NULL AUTO_INCREMENT AFTER updated,
ADD UNIQUE INDEX mycolumnname_UNIQUE (mycolumname ASC);
yo era capaz de adaptar estos complementos tructions toma una tabla con una existente clave primaria no incrementada, y agrega una clave primaria incremental a la tabla y crea una nueva clave primaria compuesta con las claves antigua y nueva como clave primaria compuesta usando el 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 era de 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 trabajando es la situación en la que hay LLAVES FOREIGNAS 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)
que supongo que tengo que derribar todas las claves externas antes de hacer la tabla ALTER y luego reconstruirlos 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.
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.
Cómo escribir PHP para ALTERAR el campo ya existente (nombre, en este ejemplo) para convertirlo en una clave principal? W/O, por supuesto, la adición de cualquier 'id' adicional campos a la tabla ..
Esto creó una mesa Actualmente - Número de registros encontrados: 4 Nombre VARCHAR (20) SÍ raza VARCHAR (30) SÍ de color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
Esta 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 vez de conseguir esto -
Número de registros encontrados: 5 Identificación del int (11) NO PRI nombre VARCHAR (20) SÍ raza VARCHAR (30) SÍ de color VARCHAR (20) SÍ peso SMALLINT (7) SI
después de probar ..
$ consulta = "ALTER TABLE ADD caballos de carreras Identificación del INT NO NULL AUTO_INCREMENT PRIMERA, agregar la clave principal (id)";
cómo conseguir esto? -
Número de registros encontrados: 4 nombre VARCHAR (20) NO PRI raza VARCHAR (30) SÍ de color VARCHAR (20) SÍ peso SMALLINT (7) SÍ
es decir INSERT/ADD .. etc. la clave principal INTO el primer registro de campo (sin agregar un campo 'id' adicional, como se indicó anteriormente.
Puede agregar una nueva columna clave principal a una tabla existente, que puede tener números de secuencia, usando comando:
ALTER TABLE mydb.mytable ADD pk_columnName INT IDENTITY
Estaba enfrentando el mismo problema, así que lo que hice caí en el campo de la clave principal, luego lo recreé y me aseguré de que sea autoincremental. Eso funcionó para mí. Espero que ayude a los demás
- 1. SQL Server agregar la clave primaria de incremento automático a la tabla existente
- 2. Agregar incremento automático a la columna de la clave principal en Rails
- 3. ¿Cómo agregar una clave primaria de incremento automático a una tabla existente, en PostgreSQL?
- 4. Incremento automático en phpmyadmin
- 5. MySQL - cómo usar VARCHAR como INCREMENTO AUTOMÁTICO Clave principal
- 6. Incremento automático de la clave de la columna Cassandra
- 7. ¿Obtener la clave principal de la tabla?
- 8. Cómo anular la atribución de una clave primaria de incremento automático al insertar un valor en una tabla MySQL?
- 9. mysqldump tabla sin volcar la clave principal
- 10. ¿Cómo agregar la clave primaria de incremento automático en función de un orden de columna?
- 11. Aumento automático de la clave principal en tablas SQL
- 12. UUID frente al número de incremento automático para la clave principal
- 13. SQL - muchos-a-muchos tabla principal clave
- 14. ID de incremento automático en la base de datos H2
- 15. C#, marco de la entidad, incremento automático
- 16. Razones para no usar un número de incremento automático para una clave principal
- 17. Función de incremento automático en la base de datos
- 18. Incremento automático en Azure Table Storage
- 19. marcar la columna existente como clave principal en la tabla de datos
- 20. SQL: establecer la columna existente como clave principal en MySQL
- 21. PHP mySQL - Insertar nuevo registro en la tabla con autoincremento en la clave principal
- 22. mysql incremento automático tecla principal que se está agotando
- 23. Agregar columna de clave principal en la tabla SQL
- 24. Cómo obtener el valor de la clave primaria de auto-incremento en MySQL usando Hibernate
- 25. Insertar manualmente en una tabla por instrucción SQL, pero la clave está autoincrementada
- 26. ¿Cómo cambiar la columna de clave principal en griales?
- 27. Android SQLite incremento automático
- 28. ¿Se puede confiar en la clave primaria de incremento automático en su base de datos?
- 29. ¿Hay un incremento automático en la base de datos completa (no en cada tabla) en mySQL?
- 30. Cómo devolver el valor de la columna de incremento automático en SQLite con VB6
Puede hacer fácilmente el 'alter table' para agregar la clave, pero MySQL no generará identificadores para los campos que aún no los tienen. Tendrás que actualizar manualmente los campos existentes y luego asegurarte de que tu nuevo auto_increment comience con el desplazamiento correcto: de forma predeterminada es '1' y terminarías con errores de clave duplicados de todos modos. –
@MarcB Acabo de probar, y de hecho insertó los identificadores para filas existentes comenzando en 1 –