¿Agregar ID de incremento automático a la tabla existente?

82

Tengo una tabla preexistente que contiene "fname", "lname", "email", "contraseña" e "ip". Pero ahora quiero una columna de incremento automático. Sin embargo, cuando entro:

ALTER TABLE users
ADD id int NOT NULL AUTO_INCREMENT

Obtengo lo siguiente:

#1075 - Incorrect table definition; there can be only one auto column and it must be defined as a key

¿Algún consejo?:)

Charles Jenkins
fuente
¿Puede publicar su definición de tabla existente?
Taryn
publique la salida dedescribe users
DKSan
intenté eso, pero solo devuelve la tabla. ¿que necesitas?
Charles Jenkins
@CharlesJenkins ¿Podría elegir la respuesta correcta?
Wadih M.
MODIFY también se puede utilizar como: usuarios de ALTER TABLE MODIFY id int NOT NULL AUTO_INCREMENT; / * AGOSTO 2019 * /
Vilas Joshi

Respuestas:

131

Prueba esto

ALTER TABLE `users` ADD `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Muhammad Asif Mahmood
fuente
12
# 1068 - Clave principal múltiple definida
Charles Jenkins
6
En SQL Server 2008, reemplazar 'AUTO_INCREMENT' con 'IDENTITY (1,1)' funcionó para mí.
Greg A
13
Tenga en cuenta que esto agrega una columna de ID como la última columna de la tabla. Agregue FIRSTa la consulta para que sea la primera en esta tabla.
Tobias Baumeister
5
@CharlesJenkins Para evitar el error "Clave principal múltiple", elimine la clave principal existente antes de definir la nueva:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean
6
Para convertirla en la primera columna, utilice, FIRSTpor ejemploALTER TABLE tbl1 ADD id INT PRIMARY KEY AUTO_INCREMENT FIRST
Tahir Raza
72

Si no le importa si la identificación automática se usa como PRIMARY KEY, simplemente puede hacer

ALTER TABLE `myTable` ADD COLUMN `id` INT AUTO_INCREMENT UNIQUE FIRST;

Acabo de hacer esto y funcionó de maravilla.

Coderer
fuente
1
Esto funcionó para mí y configuró la columna de identificación auto_increment como la clave principal.
reflexiv
3
¿Qué hace FIRSTahí?
Cees Timmerman
12
@Cees Timmerman: La palabra clave FIRST indica que la nueva columna será la primera columna de la tabla. Alternativamente, puede especificar una posición en particular usando AFTER existente_col_name. Si no se utilizan FIRST ni DESPUÉS, la nueva columna se agrega después de todas las columnas actuales.
Ruben Ramirez Padron
¿Qué pasa si quiero crear un índice en la identificación pero no un PK?
morfeo
@morpheus esto agrega un índice ÚNICO que es un índice en sí mismo. Sin embargo, no me gusta tener una columna llamada id que no es un PK.
Arth
34

Si desea agregar AUTO_INCREMENT en una tabla existente, debe ejecutar el siguiente comando SQL:

 ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key
Bhaskar Bhatt
fuente
1
eso no funcionó! Tengo este error: # 1068 - Clave principal múltiple definida
Charles Jenkins
4
obtienes Multiple primary key definedporque ya tienes una clave principal sobre la mesa. Una tabla solo puede tener una clave principal. Vuelva a intentar el comando anterior en la mesa cuando no tenga una clave principal
cchi
3
Para evitar el error "Clave principal múltiple", elimine la clave principal existente antes de definir la nueva:ALTER TABLE users DROP PRIMARY KEY, ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
Sean the Bean
21

Primero tienes que eliminar la clave principal de la tabla

ALTER TABLE nametable DROP PRIMARY KEY

y ahora puedes agregar el autoincremento ...

ALTER TABLE nametable ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
jrltt
fuente
no se puede quitar, luego AGREGAR ID. ObtendráDuplicate column name 'id'
John Joe
1
@JohnJoe, eso es porque ya tienes la columna de identificación. Pruebe esto: ALTER TABLE tabla de nombres DROP PRIMARY KEY, MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT PRIMARY KEY
TwoCode
17

Bueno, primero debes soltar el auto_incrementy primary keytienes y luego agregar el tuyo, de la siguiente manera:

-- drop auto_increment capability
alter table `users` modify column id INT NOT NULL;
-- in one line, drop primary key and rebuild one
alter table `users` drop primary key, add primary key(id);
-- re add the auto_increment capability, last value is remembered
alter table `users` modify column id INT NOT NULL AUTO_INCREMENT;
echo_Me
fuente
1
obtuve este error: # 1064 - Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'LTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' en la línea 1
Charles Jenkins
mirar su código u publicado que pierda LTER y no altera, asegúrese u copiado todo
echo_Me
gracias, pero ahora tengo este error: # 1064 - Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de 'ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY (id)' en la línea 3 ¡lo siento!
Charles Jenkins
obtuve esto: # 1064 - Tiene un error en su sintaxis SQL; consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta para usar cerca de '(id)' en la línea 1
Charles Jenkins
bueno, puedes seguir esos pasos en mi respuesta
echo_Me
12

Si ejecuta el siguiente comando:

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

Esto le mostrará el error:

ERROR 1060 (42S21): Duplicate column name 'id'

Esto se debe a que este comando intentará agregar la nueva columna nombrada ida la tabla existente.

Para modificar la columna existente tienes que usar el siguiente comando:

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT PRIMARY KEY;

¡Esto debería funcionar para cambiar la restricción de columna existente ...!

Rajat Dabade
fuente
6

Elimina la clave principal de una tabla si existe:

 ALTER TABLE `tableName` DROP PRIMARY KEY;

Agregar una columna de incremento automático a una tabla:

ALTER TABLE `tableName` ADD `Column_name` INT PRIMARY KEY AUTO_INCREMENT;

Modifique la columna que queremos considerar como clave principal:

alter table `tableName` modify column `Column_name` INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
Sunny Verma
fuente
5

¡Simplemente cambie el AÑADIR a MODIFICAR y funcionará!

Reemplazar

ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT

A

ALTER TABLE users MODIFY id int NOT NULL AUTO_INCREMENT;
John Joe
fuente
3
ALTER TABLE users CHANGE id int( 30 ) NOT NULL AUTO_INCREMENT

el parámetro entero se basa en mi configuración predeterminada de sql que tenga un buen día

Odhik Susanto
fuente
2
ALTER TABLE users ADD id int NOT NULL AUTO_INCREMENT primary key FIRST
php
fuente
0

Verifique la clave principal ya existente con una columna diferente. Si es así, suelte la clave principal usando:

ALTER TABLE Table1
DROP CONSTRAINT PK_Table1_Col1
GO

y luego escriba su consulta como está.

usuario3100184
fuente
0
ALTER TABLE `table` ADD `id` INT NOT NULL AUTO_INCREMENT unique

Prueba esto. No es necesario dejar caer su clave principal.

刘斌文
fuente
0

Para PostgreSQL, debe usar SERIAL en lugar de auto_increment.

ALTER TABLE your_table_name ADD COLUMN id SERIAL NOT NULL PRIMARY KEY
PauloBorba
fuente
-1

Proceda así:

Make a dump of your database first

Remove the primary key like that

ALTER TABLE yourtable DROP PRIMARY KEY

Add the new column like that

ALTER TABLE tu tabla agrega Id de columna INT NOT NULL AUTO_INCREMENT FIRST, ADD Primary KEY Id (Id)

Se revisará la tabla y se actualizará AutoInc.

Juhan
fuente