У меня есть две таблицы:Исправление ошибок автоинкремента MySQL в двух таблицах
id_image foo bar
1 3 5
2 8 1
3 17 88
7 14 23
8 12 9
id_image bar foo
1 2 3
1 5 6
2 18 11
2 10 12
3 8 21
3 17 81
7 29 50
7 1 14
8 10 26
8 27 34
Существует разрыв в autoincremented id_image
в первой таблице. Во второй таблице id_image
относится к id_image
в первой таблице, и там есть два из каждого идентификатора.
Примечание: Эта таблица теоретическая. Я понятия не имею , где пробел в точности, или есть или нет множественные зазоры. Все, что я знаю, это то, что первое значение - 1
, а последнее значение больше, чем общее количество строк.
Теперь я хотел бы исправить этот пробел.
Прежде чем вы скажете, что пробелы не имеют значения, и если они это сделают, это плохой дизайн базы данных, позвольте мне рассказать вам; Я согласен с тобой.
Тем не менее, я имею дело с (без безнадежной обратной стороной назад) сторонней системой с открытыми исходными кодами, в которую мне нужно импортировать огромное количество существующих данных, которые не имеют перекрестно ссылаемых идентификаторов в несколько столы. Единственный способ, которым я могу убедиться, что одни и те же данные получают соответствующий идентификатор в каждой таблице во всей системе, - это ввести его последовательно, а это значит, что я не могу иметь пробелов.
Так что теперь я должен это делать;
- Исправить пробел в столбце
id_image
в первой таблице, чтобы последнее значение соответствовало количеству строк. - Редактировать столбец
id_image
во второй таблице так, чтобы его значение соответствовало той же строке, что и перед исправлением пробела.
Как бы я начал это делать? Я понимаю, что это может быть вне возможностей языка запросов MySQL, поэтому ответы на PHP также приемлемы. Благодаря! :)
Это двигатель innodb? – Sebas
Да, это так. Однако разрыв был вызван необходимостью повторного ввода части данных, а не ошибкой INSERT IGNORE. :) –
Можете ли вы заблокировать таблицу, а затем перебрать ее с помощью «SELECT image_id FORM table ORDER BY image_id ASC' и найти пробелы? –