sql >> Database >  >> RDS >> Mysql

maak een ID in een mysql-tabel auto_increment (na het feit)

Hier is bijvoorbeeld een tabel die een primaire sleutel heeft maar niet AUTO_INCREMENT is :

mysql> CREATE TABLE foo (
  id INT NOT NULL,
  PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);

U kunt MODIFY de kolom om deze opnieuw te definiëren met de AUTO_INCREMENT optie:

mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;

Controleer of dit van kracht is:

mysql> SHOW CREATE TABLE foo;

Uitgangen:

CREATE TABLE foo (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=6 DEFAULT CHARSET=latin1

Houd er rekening mee dat u de kolomdefinitie op zijn plaats hebt gewijzigd, zonder dat u een tweede kolom hoeft te maken en de oorspronkelijke kolom laat vallen. De PRIMARY KEY beperking wordt niet beïnvloed en u hoeft het niet te vermelden in de ALTER TABLE verklaring.

Vervolgens kunt u testen of een insert een nieuwe waarde genereert:

mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;

Uitgangen:

+----+
| id |
+----+
|  1 | 
|  2 | 
|  5 | 
|  6 | 
+----+
4 rows in set (0.00 sec)

Ik heb dit getest op MySQL 5.0.51 op Mac OS X.

Ik heb ook getest met ENGINE=InnoDB en een afhankelijke tabel. De id wijzigen kolomdefinitie onderbreekt de referentiële integriteit niet.

Om te reageren op de fout 150 die u in uw opmerking noemde, is het waarschijnlijk een conflict met de externe sleutelbeperkingen. Mijn excuses, nadat ik het had getest, dacht ik dat het zou werken. Hier zijn een paar links die kunnen helpen bij het diagnosticeren van het probleem:



  1. Hoe krijg ik alleen cijfers van String in mysql?

  2. Basisprincipes van een onthoud-mij-systeem

  3. Fout ORA-00932 bij gebruik van een select met unie- en CLOB-velden

  4. hoe een datum (DateTime.now) toe te voegen aan een mySql-database in C#