2011-08-05 11 views
53

Creé una tabla en MySQL con la columna itemID. Después de crear la tabla, ahora quiero cambiar esta columna a AUTOINCREMENT. ¿Cómo se puede hacer esto usando declaraciones ALTER?Tabla ALTER - agregando AUTOINCREMENTO en MySQL

Tabla definición:

ALLITEMS (itemid int(10) unsigned, itemname varchar(50))

estoy usando el siguiente código pero es tirar error: sintaxis incorrecta.

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTOINCREMENT; 
+0

Duplicado de: http://stackoverflow.com/questions/4795382/mysql-add-auto-increment-to-primary-key – lepe

+3

'AUTOINCREMENT' tiene un carácter de subrayado:' AUTO_INCREMENT' .... – Pacerier

Respuesta

81
CREATE TABLE ALLITEMS(
    itemid INT(10)UNSIGNED, 
    itemname VARCHAR(50) 
); 

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

DESC ALLITEMS; 

INSERT INTO ALLITEMS(itemname) 
VALUES 
    ('Apple'), 
    ('Orange'), 
    ('Banana'); 

SELECT 
    * 
FROM 
    ALLITEMS; 

Estaba confundido con CHANGE y MODIFY palabras clave dentro de poco:

ALTER TABLE ALLITEMS CHANGE itemid itemid INT(10)AUTO_INCREMENT PRIMARY KEY; 

ALTER TABLE ALLITEMS MODIFY itemid INT(5); 

Mientras estamos allí, también observamos que AUTO_INCREMENT también puede comenzar con un número predefinido:

ALTER TABLE tbl AUTO_INCREMENT = 100; 
+1

Ya definí la identidad en SQL Server 2012, pero estoy tratando de pasarle algo de valor a db. Entonces, en ese lugar (autoincrementado) ¿qué necesito pasar en VS 2010? –

+2

ALTER TABLE ALLITEMS CHANGE itemid itemid INT (10) AUTO_INCREMENTO. No necesita especificar "PRIMARY KEY". Puede provocar un error: "Múltiple clave primaria definida". Además de eso, ¡gran respuesta! – lepe

+0

@ThinkCode ¿Cuándo usar 'CHANGE' y' MODIFY COLUMN'? –

15

La sintaxis:

ALTER TABLE `table1` CHANGE `itemId` `itemId` INT(11) NOT NULL AUTO_INCREMENT 

Pero la tabla necesita una clave definida (ex clave primaria en itemId).

+1

lo que es la distinción entre 'ex primary key' y' primary key' en itemid? – Thufir

10
ALTER TABLE `ALLITEMS` 
    CHANGE COLUMN `itemid` `itemid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT; 
+2

Esta debería ser la respuesta aceptada.Muy raramente alguien tendrá la necesidad de usar columnas de identificación negativas (firmadas). –

2
ALTER TABLE allitems 
CHANGE itemid itemid INT(10) AUTO_INCREMENT; 
1
ALTER TABLE tblcatalog 
    CHANGE COLUMN id id INT(11) NOT NULL AUTO_INCREMENT FIRST; 
-1
ALTER TABLE t_name modify c_name INT(10) AUTO_INCREMENT PRIMARY KEY; 
+0

Si bien este fragmento de código puede resolver la pregunta, [incluyendo una explicación] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) realmente ayuda a mejorar la calidad de su publicación. Recuerde que usted está respondiendo la pregunta a los lectores en el futuro, y es posible que esas personas no sepan los motivos de su sugerencia de código. Por favor, intente no saturar su código con comentarios explicativos, ya que esto reduce la legibilidad tanto del código como de las explicaciones. – FrankerZ

1

sintaxis básica para la adición de una PRIMARY KEY AUTO_INCREMENT para la tabla existente de la OP:

ALTER TABLE allitems 
MODIFY itemid INT(10) UNSIGNED AUTO_INCREMENT PRIMARY KEY; 

O para una nueva tabla, aquí está el ejemplo de sintaxis de the docs:

CREATE TABLE animals (
    id MEDIUMINT NOT NULL AUTO_INCREMENT, 
    name CHAR(30) NOT NULL, 
    PRIMARY KEY (id) 
); 

trampa y cosas a tener en cuenta:

  • Una columna AUTO_INCREMENT debe tener un índice. (Por lo general, querrás que sea la LLAVE PRINCIPAL, pero MySQL no requiere esto.)
  • Por lo general, es una buena idea crear tus columnas AUTO_INCREMENTUNSIGNED. A partir de los documentos:

    Use the UNSIGNED attribute if possible to allow a greater range.

  • Cuando se utiliza una cláusula CHANGE o MODIFY para hacer una columna AUTO_INCREMENT (o, de hecho siempre utiliza una cláusula CHANGE o MODIFY) usted debe tener cuidado de incluir todos los modificadores de la columna, como NOT NULL o UNSIGNED, que aparecen en la definición de la tabla cuando llama al SHOW CREATE TABLE yourtable. Estos modificadores se perderán de lo contrario.
Cuestiones relacionadas