PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
panchenko
Отправлено: 29 Июня, 2018 - 13:17:49
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




друзья такой вопрос - почему при копировании данных из одной таблицы в другую автоинкремент начинается не с последней записи?
к примеру есть table1 с 7288 записями и table2 пустая
делаю запрос
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO table2 (col1, col2) SELECT col1, col2 FROM table1;

в таблице table2 заносится 7288 записей и AUTO_INCREMENT=8192;
делаю ещё раз запрос
CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO table2 (col1, col2) SELECT col1, col2 FROM table1;

в таблице table2 получается 15479 и автоинкремент AUTO_INCREMENT=16383;
смотрю что разница в айдишниках в середине таблицы, т.е. видно что вторая запись запись данных началась с огромным отступом записи...
хотя общее количество записей правильное 14576
Для уточнения хочу заметить, что само полу ID я не копирую, а только остальные простые поля.

Вот ссылка на скрин таблицы со сдвигом ID https://prnt[dot]sc/k0qrud

Подскажите пожалуйста почему такое происходит.
Заранее благодарен!
 
 Top
andrewkard
Отправлено: 29 Июня, 2018 - 14:49:41
Post Id


Участник


Покинул форум
Сообщений всего: 1217
Дата рег-ции: Нояб. 2014  


Помог: 23 раз(а)




Вы уверены что делаете запрос, а не делаете импорт таблицы, которую слили с помощью ПМА ?
 
 Top
panchenko
Отправлено: 01 Июля, 2018 - 16:25:01
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Здравствуйте, да уверен, у меня есть таблица-1 и таблица-2... я просто делаю запрос на копирование данных их таблицы-1 в таблицу-2.
Приложу бэкап первой таблицы и бэкап второй, можете проделать тоже самое... если результат будет другой дайте знать.
Так же добавлю ссылку на 5-минут видео в котором показываю в чём проблема.
google-disk
https://drive[dot]google[dot]com/drive/f[dot][dot][dot]a4C8AWFbTA6UXG2h

Буду очень признателен, если кто-то сможет повторить данный эксперимент со своими таблицами данных, но только прошу что бы данных в таблице было не меньше чем 7000 строк, что бы не было потом вопросов...

Заранее благодарен)
Скачать файл: moex.zip
Скачан раз: 2
 
 Top
andrewkard
Отправлено: 02 Июля, 2018 - 10:55:22
Post Id


Участник


Покинул форум
Сообщений всего: 1217
Дата рег-ции: Нояб. 2014  


Помог: 23 раз(а)




panchenko пишет:
Здравствуйте, да уверен, у меня есть таблица-1 и таблица-2... я просто делаю запрос на копирование данных их таблицы-1 в таблицу-2.

запрос в студию, пожалуйста
 
 Top
panchenko
Отправлено: 02 Июля, 2018 - 11:14:39
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




CODE (SQL):
скопировать код в буфер обмена
  1. INSERT INTO moex_test2 (`company_id`, `ticker`, `version`, `seqnum`, `open`, `high`, `low`, `last`, `close`, `volume`, `valtoday_rur`, `lasttoprevprice`, `lcloseprice`, `change`, `updatetime`, `time`, `systime`, `created_at`, `updated_at`) SELECT `company_id`, `ticker`, `version`, `seqnum`, `open`, `high`, `low`, `last`, `close`, `volume`, `valtoday_rur`, `lasttoprevprice`, `lcloseprice`, `change`, `updatetime`, `time`, `systime`, `created_at`, `updated_at` FROM moex_test


вот пожалуйста...
 
 Top
andrewkard
Отправлено: 02 Июля, 2018 - 16:47:12
Post Id


Участник


Покинул форум
Сообщений всего: 1217
Дата рег-ции: Нояб. 2014  


Помог: 23 раз(а)




В этом случае вряд ли бы повторилось то, что Вы описали. В moex_test2 id будет по порядку.
 
 Top
panchenko
Отправлено: 02 Июля, 2018 - 22:09:19
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




я кидал ссылку выше, но продублирую ещё раз...
https://drive[dot]google[dot]com/drive/f[dot][dot][dot]a4C8AWFbTA6UXG2h
здесь 6-минут видео, где я показываю всё пошагово... и получается сдвиг id
 
 Top
andrewkard
Отправлено: 03 Июля, 2018 - 10:07:50
Post Id


Участник


Покинул форум
Сообщений всего: 1217
Дата рег-ции: Нояб. 2014  


Помог: 23 раз(а)




Точно, пишут что это баг при innodb_autoinc_lock_mode = 1
https://bugs[dot]mysql[dot]com/bug.php?id=70692
Цитата:

but this is undocumented behaviour

https://www[dot]percona[dot]com/blog/201[dot][dot][dot]h-insert-ignore/
с другой стороны что это стандартное поведение
Цитата:

The default innodb_autoinc_lock_mode is "1". This means InnoDB only locks the auto-increment column on the table until the end of the INSERT statement if the number of rows to be inserted cannot be determined in advance (for example in an INSERT ... SELECT query). For a simple INSERT like your queries, it assigns the auto-increment ID in advance and then allows other inserts to the table immediately, for faster writing.


получается что в этом случае движку не удается корректно посчитать следующий инкремент и он выставляет его с запасом.
 
 Top
panchenko
Отправлено: 03 Июля, 2018 - 16:01:45
Post Id


Новичок


Покинул форум
Сообщений всего: 11
Дата рег-ции: Июль 2013  


Помог: 0 раз(а)




Понял, спасибо за разъяснение!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« SQL и Архитектура БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB