добавление автоинкремента в базу данных без изменения текущих идентификаторов — SQL

#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. Я попытался добавить a auto_increment = 23,900 , но тоже не работает

2. Похоже, это такая ошибка: bugs.mysql.com/bug.php?id=98211 Пожалуйста, обновитесь до версии 8.0.21 или более поздней, сообщается, что ошибка исправлена в этой версии.