Modifique una columna de MySQL para que sea AUTO_INCREMENT

194

Estoy tratando de modificar una tabla para hacer su columna de clave principal AUTO_INCREMENTdespués del hecho. He intentado el siguiente SQL, pero recibí una notificación de error de sintaxis.

ALTER TABLE document
ALTER COLUMN document_id AUTO_INCREMENT

¿Estoy haciendo algo mal o no es posible?

+ -------------------- +
El | VERSIÓN () |
+ -------------------- +
El | 5.0.75-0ubuntu10.2 |
+ -------------------- +
Cruzar
fuente

Respuestas:

379
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment
romano
fuente
3
Tengo curiosidad por qué sugerirías INT (4). ¿Alguna razón en particular?
Steven Oxley
3
@Steven Oxley porque declaró mi mesa de esa manera.
C. Ross
30
Especificar un número entre paréntesis no hace exactamente nada (bueno, casi nada) para los tipos enteros de MySQL. Lo único que puede verse influenciado por el número es el ancho de la pantalla, y depende del cliente hacerlo. Pero no se deje engañar y piense que funciona como lo hace para los tipos VARCHAR y DECIMAL: en esos casos, la cantidad de datos que puede almacenar allí está realmente especificada, mientras que un sabor particular de INT siempre permite el almacenamiento de la información exacta. mismo rango de valores
Roland Bouman
Siempre obtengo un error de clave principal mientras realizo estas operaciones, así que sé que esto es lo que hago: SET FOREIGN_KEY_CHECKS = 0; ALTER TABLE document DROP PRIMARY KEY; ALTERAR TABLA documento MODIFICAR COLUMNA document_id INT PRIMARY KEY AUTO_INCREMENT NOT NULL; SET FOREIGN_KEY_CHECKS = 1;
Fernando
Esto no parece funcionar en MySQL porque necesita establecer la columna como clave principal ya que solo una columna puede ser auto_increment (también vea la respuesta de Roland Bouman a continuación
charlchad
74

Roman tiene razón, pero tenga en cuenta que la columna auto_increment debe ser parte de la PRIMARY KEY o una UNIQUE KEY (y en casi el 100% de los casos, debería ser la única columna que constituye la PRIMARY KEY):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY
Roland Bouman
fuente
10
+1. Clave principal requerida si no está definida en el momento de la creación de la tabla.
1
Esto también significa que los datos en esa columna deben ser únicos
Umair Malhi
10

En mi caso solo funcionó cuando lo puse not null. Creo que esto es una limitación.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;
Rabia Naz Khan
fuente
7

El SQL para hacer esto sería:

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;

Hay un par de razones por las cuales su SQL podría no funcionar. Primero, debe volver a especificar el tipo de datos ( INTen este caso). Además, la columna que está intentando modificar debe estar indexada (no tiene que ser la clave principal, pero generalmente eso es lo que desea). Además, solo puede haber una AUTO_INCREMENTcolumna para cada tabla. Por lo tanto, es posible que desee ejecutar el siguiente SQL (si su columna no está indexada):

ALTER TABLE `document` MODIFY `document_id` INT AUTO_INCREMENT PRIMARY KEY;

Puede encontrar más información en la documentación de MySQL: http://dev.mysql.com/doc/refman/5.1/en/alter-table.html para la sintaxis de la columna de modificación y http://dev.mysql.com/doc /refman/5.1/en/create-table.html para obtener más información sobre cómo especificar columnas.

Steven Oxley
fuente
6

Debe especificar el tipo de columna antes de la auto_incrementdirectiva, es decir ALTER TABLE document MODIFY COLUMN document_id INT AUTO_INCREMENT.

Håvard S
fuente
1
Debería serMODIFY COLUMN
shxfee
5

AUTO_INCREMENT es parte del tipo de datos de la columna, debe definir nuevamente el tipo de datos completo para la columna:

ALTER TABLE document
ALTER COLUMN document_id int AUTO_INCREMENT

( inttomado como ejemplo, debe establecerlo en el tipo que tenía la columna antes)

Jabón Dan
fuente
3

Puedes hacerlo así:

 alter table [table_name] modify column [column_name] [column_type] AUTO_INCREMENT;
Aditya Kumar
fuente
Esto parece ser solo una repetición de todas las otras respuestas.
Pang
2

AUTO_INCREMENT es parte del tipo de datos de la columna, debe definir nuevamente el tipo de datos completo para la columna:

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT

(int tomado como ejemplo, debe establecerlo en el tipo que tenía la columna antes)

KKK
fuente
2

Puede usar la siguiente consulta para hacer que document_id se incremente automáticamente

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment

También se prefiere hacer document_id clave principal

ALTER TABLE document MODIFY COLUMN document_id INT auto_increment PRIMARY KEY;
Azhar Zafar
fuente
1
Tenga en cuenta que si esa columna ya es una clave principal, no puede volver a declararla allí; de lo contrario, da error sobre varias claves primarias (es de esperar que sea un poco más inteligente allí y vea que es la misma clave principal, supongo) . Entonces, en ese caso, simplemente omita la CLAVE PRIMARIA y no afecta la configuración de la clave principal existente en esa columna
George Birbilis,
2

La siguiente declaración funciona. Tenga en cuenta que debe mencionar el tipo de datos nuevamente para el nombre de la columna (vuelva a declarar el tipo de datos que era la columna antes).

ALTER TABLE document
MODIFY COLUMN document_id int AUTO_INCREMENT;
usuario5082888
fuente
2

Si ninguno de los trabajos anteriores intenta esto. Esto es lo que hice en MYSQL y sí, debe escribir el nombre de la columna (document_id) dos veces.

ALTER TABLE document
CHANGE COLUMN document_id document_id INT(11) NOT NULL AUTO_INCREMENT ;
Susie
fuente
1

Para modificar la columna en mysql usamos alterar y modificar palabras clave. Supongamos que hemos creado una tabla como:

create table emp(
    id varchar(20),
    ename varchar(20),
    salary float
);

Ahora queremos modificar el tipo de ID de columna a entero con incremento automático. Puedes hacer esto con un comando como:

alter table emp modify column id int(10) auto_increment;
humo solar
fuente
1

Sintaxis de tabla anterior:

CREATE TABLE apim_log_request (TransactionId varchar(50) DEFAULT NULL);

Para cambiar el TransactionId al incremento automático, use esta consulta

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment;
Usman Yaqoob
fuente
1
alter table tbl_user MODIFY COLUMN id int(10) auto_increment;
Aminur Rahman
fuente
1

Así como así:

alter table document modify column id int(11) auto_increment;

el más alto
fuente
0

A medida que redefine la columna nuevamente, debe especificar el tipo de datos nuevamente y agregarle auto_increment ya que es parte del tipo de datos.

ALTER TABLE `document` MODIFY COLUMN `document_id` INT AUTO_INCREMENT;
Optimizador
fuente
0

Establecer la columna como clave principal y auto_increment al mismo tiempo:

  mysql> ALTER TABLE persons MODIFY COLUMN personID INT auto_increment PRIMARY KEY;
    Query OK, 10 rows affected (0.77 sec)
    Records: 10  Duplicates: 0  Warnings: 0

    mysql>
Nesimi Taghizade
fuente
0

ALTER TABLE table_name MODIFICAR COLUMNA id tipo de datos auto_increment;

Kartik Madnani
fuente
-3

Use las siguientes consultas:

ALTER TABLE YourTable DROP COLUMN IDCol

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1)
Doug Cobain
fuente