Para mí dice: esto definiría múltiples claves primarias. Estoy usando InnoDB. Tenga en cuenta que ya tengo 3 de ellos.
LMD
2
Definitivamente pondría FIRSTdespués AUTO_INCREMENT, lo que significa que idserá la primera columna de la tabla ya existente. De lo contrario, se colocará al final de la tabla como está escrito ahora, lo que puede ser un poco confuso cuando se hace de manera simpleSELECT * ...
StefanK
Cómo obtener un primer lugar en la nueva columna 'id'
TipVisor
17
Columna existente
Si desea agregar una restricción de clave principal a una columna existente, toda la sintaxis enumerada anteriormente fallará.
Para agregar una restricción de clave primaria a una columna existente, use el formulario:
mysql no reconoce MODIFY como declaración adecuada (al menos en XAMPP, InnoDB)
LMD
@LMD ¿En qué versión de mysql estás? (NOTA: Sé que funcionó en el momento en que publiqué esto y creo que era 5.6 ... pero no puedo recordarlo con seguridad)
MER
1
Si para usted, como para mí, no funciona, reemplace MODIFY con CHANGE y ¡funcionará!
csr-nontol
12
Si su mesa es bastante grande, mejor no use la declaración:
porque hace una copia de todos los datos en una tabla temporal, modifique la tabla y luego la vuelva a copiar. Mejor hazlo manualmente. Cambie el nombre de su mesa:
rename table goods to goods_old;
cree una nueva tabla con la clave principal y todos los índices necesarios:
createtable goods (
id int(10) unsigned notnull AUTO_INCREMENT
... other columns ...primarykey(id));
mueva todos los datos de la tabla anterior a una nueva, desactivando claves e índices para acelerar la copia:
SET UNIQUE_CHECKS=0;ALTERTABLE goods DISABLE KEYS;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;ALTERTABLE goods ENABLE KEYS;SET UNIQUE_CHECKS=1;
SET AUTOCOMMIT =0;SET UNIQUE_CHECKS=0;SET FOREIGN_KEY_CHECKS=0;INSERTINTO goods (... your column names ...)SELECT... your column names FROM goods_old;SET FOREIGN_KEY_CHECKS=1;SET UNIQUE_CHECKS=1;COMMIT;SET AUTOCOMMIT =1;
Se necesitan 2000 segundos para agregar PK a una tabla con ~ 200 millones de filas.
Me sorprendió cuánto tiempo tuve que buscar para encontrar esta respuesta. Gracias por estos útiles ejemplos.
Ryan
4
No estoy seguro de si esto le importa a alguien más, pero prefiero la tabla de identificación a la primera columna de la base de datos. La sintaxis para eso es:
Para mí, ninguna de las sugerencias funcionó y me dio los errores de sintaxis, así que intenté usar phpmyadmin (versión 4.9.2), (10.4.10-MariaDB) y agregué una idcolumna con clave primaria de incremento automático. IdLa columna se agregó muy bien desde el primer elemento.
El resultado de la consulta fue:
ALTER TABLE table_nameAÑADIR idINT NOT NULL AUTO_INCREMENT PRIMERO, AÑADIR CLAVE PRIMARIA ( id);
Respuestas:
Después de agregar la columna, siempre puede agregar la clave principal:
ALTER TABLE goods ADD PRIMARY KEY(id)
En cuanto a por qué su secuencia de comandos no funcionaba, debe especificar
PRIMARY KEY
, no solo la palabraPRIMARY
:fuente
FIRST
despuésAUTO_INCREMENT
, lo que significa queid
será la primera columna de la tabla ya existente. De lo contrario, se colocará al final de la tabla como está escrito ahora, lo que puede ser un poco confuso cuando se hace de manera simpleSELECT * ...
Columna existente
Si desea agregar una restricción de clave principal a una columna existente, toda la sintaxis enumerada anteriormente fallará.
Para agregar una restricción de clave primaria a una columna existente, use el formulario:
fuente
Si su mesa es bastante grande, mejor no use la declaración:
porque hace una copia de todos los datos en una tabla temporal, modifique la tabla y luego la vuelva a copiar. Mejor hazlo manualmente. Cambie el nombre de su mesa:
cree una nueva tabla con la clave principal y todos los índices necesarios:
mueva todos los datos de la tabla anterior a una nueva, desactivando claves e índices para acelerar la copia:
- UTILICE ESTO PARA LAS TABLAS MyISAM :
O
- UTILICE ESTO PARA LAS TABLAS InnoDB :
Se necesitan 2000 segundos para agregar PK a una tabla con ~ 200 millones de filas.
fuente
No estoy seguro de si esto le importa a alguien más, pero prefiero la tabla de identificación a la primera columna de la base de datos. La sintaxis para eso es:
Lo cual es solo una ligera mejora con respecto a la primera respuesta. Si quisiera que estuviera en una posición diferente, entonces
HTH, pies
fuente
Utilice esta consulta,
fuente
Este código funciona en mi base de datos mysql:
fuente
fuente
Prueba esto,
fuente
Para mí, ninguna de las sugerencias funcionó y me dio los errores de sintaxis, así que intenté usar phpmyadmin (versión 4.9.2), (10.4.10-MariaDB) y agregué una
id
columna con clave primaria de incremento automático.Id
La columna se agregó muy bien desde el primer elemento.El resultado de la consulta fue:
ALTER TABLE
table_name
AÑADIRid
INT NOT NULL AUTO_INCREMENT PRIMERO, AÑADIR CLAVE PRIMARIA (id
);fuente
Eliminar comillas para que funcione correctamente ...
fuente