Questo è quello che ho provato ma non riesce:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
Qualcuno ha un suggerimento?
Questo è quello che ho provato ma non riesce:
alter table goods add column `id` int(10) unsigned primary AUTO_INCREMENT;
Qualcuno ha un suggerimento?
Risposte:
Dopo aver aggiunto la colonna, puoi sempre aggiungere la chiave primaria:
ALTER TABLE goods ADD PRIMARY KEY(id)
Per quanto riguarda il motivo per cui il tuo script non funzionava, devi specificare PRIMARY KEY, non solo la parola PRIMARY:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
FIRSTdopo AUTO_INCREMENT, il che significa che idsarà la prima colonna della tabella già esistente. Altrimenti verrà messo alla fine della tabella come è scritto ora, il che può creare un po 'di confusione quando si fa sempliceSELECT * ...
Se si desidera aggiungere un vincolo di chiave primaria a una colonna esistente, tutta la sintassi precedentemente elencata fallirà.
Per aggiungere un vincolo di chiave primaria a una colonna esistente utilizzare il modulo:
ALTER TABLE `goods`
MODIFY COLUMN `id` INT(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT;
Se il tuo tavolo è abbastanza grande, meglio non usare l'affermazione:
alter table goods add column `id` int(10) unsigned primary KEY AUTO_INCREMENT;
perché fa una copia di tutti i dati in una tabella temporanea, altera la tabella e poi la copia di nuovo. Meglio farlo manualmente. Rinomina la tua tabella:
rename table goods to goods_old;
crea una nuova tabella con chiave primaria e tutti gli indici necessari:
create table goods (
id int(10) unsigned not null AUTO_INCREMENT
... other columns ...
primary key (id)
);
sposta tutti i dati dalla vecchia tabella alla nuova, disabilitando chiavi e indici per velocizzare la copia:
- UTILIZZA QUESTO PER I TAVOLI 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;
- USA QUESTO PER I TAVOLI 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;
Sono necessari 2000 secondi per aggiungere PK a una tabella con ~ 200 mln di righe.
Non sono sicuro che sia importante per qualcun altro, ma preferisco la tabella id alla prima colonna del database. La sintassi per questo è:
ALTER TABLE your_db.your_table ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT FIRST;
Che è solo un leggero miglioramento rispetto alla prima risposta. Se volevi che fosse in una posizione diversa, allora
ALTER TABLE unique_address ADD COLUMN `id` int(10) UNSIGNED PRIMARY KEY AUTO_INCREMENT AFTER some_other_column;
HTH, -ft
Usa questa query,
alter table `table_name` add primary key(`column_name`);
Questo codice funziona nel mio database 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;
Prova questo,
alter table goods add column `id` int(10) unsigned primary key auto_increment
Per me, nessuno dei suggerimenti ha funzionato dandomi errori di sintassi, quindi ho provato a utilizzare phpmyadmin (versione 4.9.2), (10.4.10-MariaDB) e aggiunta di una idcolonna con chiave primaria a incremento automatico. Idcolonna è stata aggiunta piacevolmente dal primo elemento.
L'output della query era:
ALTER TABLE table_nameADD idINT NOT NULL AUTO_INCREMENT PRIMA, ADD PRIMARY KEY ( id);
Rimuovi le virgolette per funzionare correttamente ...
alter table goods add column id int(10) unsigned primary KEY AUTO_INCREMENT;