#mysql #sql
#mysql #sql
Вопрос:
У меня есть такой стол, как этот:
id | name
--------------
1 | John
2 | Mary
.
.
.
NULL | Brian
NULL | Jacob
Я хотел сделать id строкой с АВТОМАТИЧЕСКИМ УВЕЛИЧЕНИЕМ, но, думаю, я не знал, что при добавлении новых имен Brian, Jacob
автоматически не добавляются увеличенные значения идентификаторов. Мне интересно, есть ли способ добавить эти значения для замены NULL, не изменяя какой-либо идентификатор над ним.
Комментарии:
1. Есть один подход. Скопируйте существующую таблицу в
temp
таблицу, удалите текущую таблицу и создайте ее заново (с правильной структурой таблицы), а затем скопируйте значения обратноtemp
.2. Вы можете установить AUTO_INCREMENT = 1. сбросьте начальные значения первичного ключа на 1 для справки: techonthenet.com/mysql/auto_increment_reset.php
Ответ №1:
ДЕМОНСТРАЦИЯ:
mysql> create table mytable (id int, name text);
Query OK, 0 rows affected (0.02 sec)
mysql> insert into mytable values
-> (1, 'John'),
-> (2, 'Mary'),
-> (NULL, 'Brian'),
-> (NULL, 'Jacob');
Query OK, 4 rows affected (0.01 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> alter table mytable modify column id int auto_increment, add primary key (id);
Query OK, 4 rows affected (0.02 sec)
Records: 4 Duplicates: 0 Warnings: 0
mysql> select * from mytable;
---- -------
| id | name |
---- -------
| 1 | John |
| 2 | Mary |
| 3 | Brian |
| 4 | Jacob |
---- -------
4 rows in set (0.00 sec)
Вывод: Да.
Вы должны id
быть первым столбцом в ключе (здесь я использовал ПЕРВИЧНЫЙ КЛЮЧ). Механизм хранения InnoDB в MySQL не позволяет автоматически увеличивать столбец, если он не является крайним левым столбцом в некотором ключе (то есть, достаточно любого индекса).
Комментарии:
1. Я получаю а
Query 1 ERROR: Out of range value for column 'columns' at row 167
, когда запускаю это. Стоит отметить, что текущие идентификаторы не являются идеальными приращениями, они выглядят как 1,3,4,6,7, …, при этом наибольшее значение идентификатора равно 23 899. Я попытался добавить aauto_increment = 23,900
, но тоже не работает2. Похоже, это такая ошибка: bugs.mysql.com/bug.php?id=98211 Пожалуйста, обновитесь до версии 8.0.21 или более поздней, сообщается, что ошибка исправлена в этой версии.