Как добавить первичный ключ в таблицу mysql без первичного ключа - PullRequest
0 голосов
/ 16 июня 2020

Мне нужно добавить первичный ключ в таблицу в Mysql с существующими данными.

STATES:

| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| country_code | varchar(2)   | YES  |     | NULL    |       |
| state_code   | varchar(20)  | YES  |     | NULL    |       |
| state_name   | varchar(255) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

Я создал таблицу States2, которая пуста и содержит первичный ключ в нем.

+--------------+--------------+------+-----+---------+-------+
| Field        | Type         | Null | Key | Default | Extra |
+--------------+--------------+------+-----+---------+-------+
| id           | int(11)      | NO   | PRI | NULL    |       |
| country_code | varchar(2)   | YES  |     | NULL    |       |
| state_code   | varchar(20)  | YES  |     | NULL    |       |
| state_name   | varchar(255) | YES  |     | NULL    |       |
+--------------+--------------+------+-----+---------+-------+

Что я хочу сделать сейчас, так это взять данные из состояний и скопировать их в States2 и в то же время добавить первичный ключ автоинкремента.

Это что я пробовал:

mysql> insert into states2 select NULL,states.* FROM states;
ERROR 1048 (23000): Column 'id' cannot be null

Как правильно скопировать это и одновременно вставить ключ?

1 Ответ

2 голосов
/ 16 июня 2020

Вы явно присваиваете значение null столбцу первичного ключа, что не позволяет MySQL (первичный ключ не может быть null).

Просто оставьте отдельно столбец первичного ключа из оператора insert, поэтому может произойти автоинкремент:

insert into states2 (country_code, state_code, state_name) 
select country_code, state_code, state_name FROM states;
...