2010-01-30 16 views
142

Estoy tratando de modificar una tabla para hacer que sea la columna de la clave principal AUTO_INCREMENT después del hecho. He intentado el siguiente sql, pero tiene un error de sintaxis:Mysql - Altere una columna para ser AUTO_INCREMENTO

ALTER TABLE document 
ALTER COLUMN document_id AUTO_INCREMENT 

estoy haciendo algo mal o no es esto posible?

 
+--------------------+ 
| VERSION()   | 
+--------------------+ 
| 5.0.75-0ubuntu10.2 | 
+--------------------+ 

Respuesta

274
ALTER TABLE document MODIFY COLUMN document_id INT auto_increment 
+3

Tengo curiosidad por qué sugerir INT (4). ¿Alguna razón en particular? –

+2

@Steven Oxley porque declare mi mesa de esa manera. –

+27

Especificar un número entre paréntesis hace exactamente * nada * (bueno, casi nada) para tipos enteros de MySQL. Lo único que puede verse influido 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í en realidad está especificada, mientras que un sabor particular de INT siempre permite el almacenamiento de la información exacta. el mismo rango de valores –

3

AUTO_INCREMENT es parte del tipo de datos de la columna, usted tiene que definir el tipo de datos completa para la columna una vez más:

ALTER TABLE document 
ALTER COLUMN document_id int AUTO_INCREMENT 

(int tomado como ejemplo, debe ponerlo a la escriba la columna tenía antes)

4

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

+1

Debe ser 'MODIFY COLUMN' – shxfee

58

romana que es correcto, pero tenga en cuenta que la columna AUTO_INCREMENT debe ser parte de la clave primaria o una clave única (y en casi el 100% de los casos, debe ser la única columna que compone la PRIMARY KEY):

ALTER TABLE document MODIFY document_id INT AUTO_INCREMENT PRIMARY KEY 
+9

+1. Se requiere clave principal si no está definida en el momento de la creación de la tabla. –

4

El SQL para hacer esto sería:

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

Hay un par de razones por las que su SQL podría no funcionar. Primero, debe volver a especificar el tipo de datos (INT en este caso). Además, la columna que intenta modificar debe estar indexada (no tiene que ser la clave principal, pero generalmente es lo que usted desearía). Además, solo puede haber una columna AUTO_INCREMENT para cada tabla. Por lo tanto, es posible que desee ejecutar el siguiente código SQL (si su columna no está indexado):

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 modificar y http://dev.mysql.com/doc/refman/5.1/en/create-table.html para obtener más información sobre las columnas que especifican .

2

AUTO_INCREMENT es parte del tipo de datos de la columna, usted tiene que definir el tipo de datos completa para la columna una vez más:

ALTER TABLE document 
MODIFY COLUMN document_id int AUTO_INCREMENT 

(int tomado como un ejemplo, debe establecer que el tipo de la columna tenía antes)

2

Si ninguno de los anteriores funciona, intente esto. Esto es lo que hice en MYSQL y sí, necesitas 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 ; 
2

Debajo de la declaración funciona. Tenga en cuenta que debe volver a mencionar el tipo de datos para el nombre de columna

ALTER TABLE document 
MODIFY COLUMN document_id int AUTO_INCREMENT; 
4

En mi caso, solo funcionó cuando puse No nulo. Creo que esto es una restricción.

ALTER TABLE document MODIFY COLUMN document_id INT NOT NULL AUTO_INCREMENT;

0

Para modificar la columna en mysql utilizamos 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 la columna de ID a un entero con incremento automático. Usted puede hacer esto con un comando como:

alter table emp modify column id int(10) auto_increment; 
0

alter int tabla tbl_user MODIFICAR COLUMNA id (10) AUTO_INCREMENT;

-3

Use las siguientes consultas:

ALTER TABLE YourTable DROP COLUMN IDCol 

ALTER TABLE YourTable ADD IDCol INT IDENTITY(1,1) 
0

Anterior sintaxis de la tabla:

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

Para cambiar el transactionId al uso incremento automático esta consulta

ALTER TABLE apim_log_request MODIFY COLUMN TransactionId INT auto_increment; 
-1

medida que están redefiniendo la columna nuevamente, debe especificar el tipo de datos nuevamente y agregarle auto_increment ya que es parte de datat ype

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