Esto es lo que intenté pero falla:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
¿Alguien tiene un consejo?
Esto es lo que intenté pero falla:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
¿Alguien tiene un consejo?
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 palabra PRIMARY
:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRST
después AUTO_INCREMENT
, lo que significa que id
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 * ...
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:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
Si su mesa es bastante grande, mejor no use la declaración:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
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:
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
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 :
SET UNIQUE_CHECKS=0;
ALTER TABLE goods DISABLE KEYS;
INSERT INTO goods (... your column names ...) SELECT ... your column names FROM goods_old;
ALTER TABLE goods ENABLE KEYS;
SET UNIQUE_CHECKS=1;
- UTILICE ESTO PARA LAS TABLAS InnoDB :
SET AUTOCOMMIT = 0; SET UNIQUE_CHECKS=0; SET FOREIGN_KEY_CHECKS=0;
INSERT INTO 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.
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:
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
Lo cual es solo una ligera mejora con respecto a la primera respuesta. Si quisiera que estuviera en una posición diferente, entonces
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
HTH, pies
Utilice esta consulta,
alter table `table_name` add primary key(`column_name`);
Este código funciona en mi base de datos mysql:
ALTER TABLE `goods`
ADD COLUMN `id` INT NOT NULL AUTO_INCREMENT,
ADD PRIMARY KEY (`id`);
ALTER TABLE GOODS MODIFY ID INT(10) NOT NULL PRIMARY KEY;
Prueba esto,
alter table goods add column `id` int(10) unsigned primary key auto_increment
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ÑADIR id
INT NOT NULL AUTO_INCREMENT PRIMERO, AÑADIR CLAVE PRIMARIA ( id
);
Eliminar comillas para que funcione correctamente ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;