Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

faça um ID em uma tabela mysql auto_increment (após o fato)


Por exemplo, aqui está uma tabela que tem uma chave primária, mas não é AUTO_INCREMENT :
mysql> CREATE TABLE foo (
  id INT NOT NULL,
  PRIMARY KEY (id)
);
mysql> INSERT INTO foo VALUES (1), (2), (5);

Você pode MODIFY a coluna para redefini-la com o AUTO_INCREMENT opção:
mysql> ALTER TABLE foo MODIFY COLUMN id INT NOT NULL AUTO_INCREMENT;

Verifique se isso entrou em vigor:
mysql> SHOW CREATE TABLE foo;

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

Observe que você modificou a definição de coluna no local, sem precisar criar uma segunda coluna e descartar a coluna original. A PRIMARY KEY restrição não é afetada e você não precisa mencionar no ALTER TABLE demonstração.

Em seguida, você pode testar se uma inserção gera um novo valor:
mysql> INSERT INTO foo () VALUES (); -- yes this is legal syntax
mysql> SELECT * FROM foo;

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

Eu testei isso no MySQL 5.0.51 no Mac OS X.

Também testei com ENGINE=InnoDB e uma tabela dependente. Modificando o id definição de coluna não interrompe a integridade referencial.

Para responder ao erro 150 que você mencionou em seu comentário, provavelmente é um conflito com as restrições de chave estrangeira. Peço desculpas, depois que testei achei que funcionaria. Aqui estão alguns links que podem ajudar a diagnosticar o problema: