Cum se adaugă AUTO_INCREMENT la o coloană existentă? (Programare, Mysql, Auto Increment)

mpen a intrebat.
a intrebat.

Cum se adaugă auto_increment la o coloană existentă a unui tabel MySQL?

10 răspunsuri
Don Kirkby

Cred că doriți să MODIFY coloana așa cum este descris pentru ALTER TABLE comanda. Ar putea fi ceva de genul acesta:

ALTER TABLE users MODIFY id INTEGER NOT NULL AUTO_INCREMENT;

Înainte de a rula comanda de mai sus asigurați-vă că id coloana are un index primar.

Comentarii

  • De asemenea, poate doriți să includeți valoarea curentă a coloanei ca un offset, de exemplu ALTER TABLE tbl AUTO_INCREMENT = 100; –  > Por Phil.
  • 18

  • Dacă aveți deja valori în tabel, probabil că veți primi o eroare de cheie duplicată pentru valoarea 1. Pentru a schimba valoarea AUTO_INCREMENT, tabelul trebuie să utilizeze motorul MyISAM. Așadar, mergeți la proprietățile tabelei, schimbați motorul de la, să zicem, InnoDB la MyISAM, apoi schimbați valoarea AUTO_INCREMENT la ceea ce ar trebui să fie următorul în secvența dvs. După ce aplicați aceste modificări, puteți schimba motorul înapoi la cel pe care îl foloseați. –  > Por sday.
  • stackoverflow.com/questions/1485668/… – –  > Por symcbean.
Arian Acosta

Metoda de adăugare a AUTO_INCREMENT la un tabel cu date în timp ce se evită „Duplicate entry„:

  1. Efectuați o copie a tabelului cu datele utilizând INSERT SELECT:

    CREATE TABLE backupTable LIKE originalTable; 
    INSERT backupTable SELECT * FROM originalTable;
    
  2. Ștergeți datele din originalTable (pentru a elimina intrările duplicate):

    TRUNCATE TABLE originalTable;
    
  3. Pentru a adăuga AUTO_INCREMENT și PRIMARY KEY

    ALTER TABLE originalTable ADD id INT PRIMARY KEY AUTO_INCREMENT;
    
  4. Copiați datele înapoi în originalTable (faceți nu nu includeți coloana nou creată (id), deoarece aceasta va fi completată automat)

    INSERT originalTable (col1, col2, col3) 
    SELECT col1, col2,col3
    FROM backupTable;
    
  5. Ștergeți backupTable:

    DROP TABLE backupTable;
    

Sper că acest lucru este util!

Mai multe despre duplicarea tabelelor folosind CREATE LIKE:

Duplicarea unei tabele MySQL, a indicilor și a datelor

Comentarii

  • Dacă aveți o tabelă mare… sau dacă doriți să faceți lucrurile puțin mai inteligent, înlocuiți pasul 1 cu: CREATE TABLE backupTable LIKE originalTable; RENAME TABLE originalTable TO originalTable.old, backupTable TO originalTable; Săriți peste pasul 2 sau veți pierde toate datele. –  > Por Tim Martens.
  • Acest lucru mi se pare foarte periculos, deoarece înregistrările ar putea sfârși cu ușurință cu numere de identificare diferite de cele cu care au început. În cazul în care alte tabele au chei străine către originalTable sau vă pasă de numerele de identificare din alte motive, atunci nu cred că doriți să utilizați această metodă. –  > Por Don Kirkby.
  • @DonKirkby Vă mulțumim că ați subliniat acest lucru. Este puțin probabil ca o coloană id neunică să fi fost utilizată împreună cu o cheie externă, dar aveți dreptate. Această metodă face exact acest lucru. Ea reconstruiește (sau creează) toate id-urile pentru ca acestea să fie unice. –  > Por Arian Acosta.
  • Aceasta este o problemă, deoarece orice lucru care utilizează datele în timpul TRUNCATE va avea un comportament neașteptat –  > Por KeatsKelleher.
php
Alter table table_name modify column_name datatype(length) AUTO_INCREMENT PRIMARY KEY

Ar trebui să adăugați cheia primară pentru a crește automat, altfel veți obține o eroare în mysql.

Comentarii

  • Dar dacă coloana a fost deja o cheie primară, veți primi o eroare de genul „ERROR 1068 (42000): Cheie primară multiplă definită”. –  > Por Manish Bansal.
Zigri2612

Pur și simplu adăugați auto_increment Constraint În coloană sau MODIFY COLUMN :-

 ALTER TABLE `emp` MODIFY COLUMN `id` INT NOT NULL UNIQUE AUTO_INCREMENT FIRST;

Sau adăugați mai întâi o coloană, apoi modificați coloana ca –

1. Alter TABLE `emp` ADD COLUMN `id`;

2. ALTER TABLE `emp` CHANGE COLUMN `id` `Emp_id` INT NOT NULL UNIQUE AUTO_INCREMENT FIRST;

Comentarii

  • Asta id coloană are nevoie de o INDEX, , dar nu neapărat UNIQUE sau PRIMARY KEY. Un simplu INDEX v-ar permite să manual să adăugați o valoare dup (ceea ce nu veți face), dar, în rest, este la fel de bună. –  > Por Rick James.
walt

Acest lucru a funcționat pentru mine în cazul în care doriți să modificați atributul AUTO_INCREMENT pentru o tabelă non-vidă:

1.)Ați exportat întreaga tabelă ca fișier .sql
2.)Ați șters tabelul după export
2.)Ați efectuat modificarea necesară în comanda CREATE_TABLE
3.)A executat comenzile CREATE_TABLE și INSERT_INTO din fișierul .sql.
…et viola

Comentarii

  • Mi-ați salvat ziua –  > Por nonabhai.
Fluch

Am reușit să fac acest lucru cu următorul cod:

ALTER TABLE `table_name`
CHANGE COLUMN `colum_name` `colum_name` INT(11) NOT NULL AUTO_INCREMENT FIRST;

Acesta este singurul mod în care am reușit să fac o coloană să se incrementeze automat.

INT(11) arată că lungimea maximă a int este 11, puteți sări peste ea dacă doriți.

Comentarii

  • FIRST este o convenție bună, dar nu este o cerință. Adresa (11) nu face nimic dacă nu aveți și ZEROFILL; nu vă deranjați să o specificați. –  > Por Rick James.
Maria

Alter table table_name modify table_name.column_name data_type AUTO_INCREMENT;

ex:

Alter table avion modify avion.av int AUTO_INCREMENT;

Comentarii

  • Bine ați venit la SO, răspunsul dumneavoastră există deja. Vă rugăm să formatați codul sursă și să explicați! –  > Por cSteusloff.
user4626745

dacă aveți constrângeri FK și nu doriți să eliminați constrângerea din tabel. folosiți „index” în loc de primar. atunci veți putea modifica tipul acestuia în auto increment.

PHPGuru

Aveam date existente în prima coloană și erau 0. Mai întâi am făcut prima coloană nulă.Apoi am setat datele pentru coloană ca fiind nule.Apoi am setat coloana ca index.Apoi am făcut-o cheie primară cu incrementare automată activată. Aici am folosit răspunsul unei alte persoane de mai sus:

ALTER TABLE `table_name` CHANGE COLUMN `colum_name` `colum_name` INT(11) NOT NULL AUTO_INCREMENT FIRST;

Acest lucru a adăugat numere la toate rândurile din acest tabel începând de la 1. Dacă am rulat mai întâi codul de mai sus, nu a funcționat, deoarece toate valorile erau 0-uri. De asemenea, a fost necesar să fac un index înainte de a o face să se incrementeze automat.Apoi am făcut coloana o cheie primară.

Comentarii

  • Ați fi putut folosi SET sql_mode='NO_AUTO_VALUE_ON_ZERO'; Și dacă nu funcționează pentru că aveți mai multe zerouri din anumite motive, ați putea folosi un contor de rânduri pentru a seta în mod explicit toate rândurile la un nou număr. –  > Por mpen.
Gopal Mehakare
ALTER TABLE Table name ADD column datatype AUTO_INCREMENT,ADD primary key(column);

Comentarii

  • Sunteți sigur de asta? OP a întrebat acum opt ani(!) cum să modifice un existent coloană –  > Por Nico Haase.
  • îmi pare rău, dar el a întrebat despre cum să modifice o coloană existentă, răspunsul tău nu are sens! –  > Por Leo Gasparrini.