Когда данные строк удаляются пакетами, то, как InnoDB обрабатывает автоматически увеличивающиеся идентификаторы, может оказаться большой проблемой.
Все шаги эксперимента, как показано выше:
первый шаг: Создайте таблицу и установите столбцы автоинкремента;
второй шаг: Укажите id=1 для вставки, привязка первой строки к id равна 1;
третий шаг: не указывайте идентификатор, полагайтесь на механизм автоинкремента и вставляйте 3 строки;
Голос за кадром: Идентификатор должен быть изменен на 2, 3, 4 сейчас?
четвертый шаг:delete удаляет все записи;
_Голос за кадром: _Повесить здесь легко.
пятый шаг: укажите id=0 для вставки;
Шаг 6: укажите id=1 для вставки;
Шаг 7: не указывайте идентификатор, полагайтесь на механизм автоинкремента и вставляйте 1 строку;
Простите, какие идентификаторы трех строк записей в таблице на данный момент?
Соответствует ли это ожиданиям всех?
Уделите 1 минуту сегодня, чтобы поговорить о сходствах и различиях между использованием усечения и удаления для пакетного удаления данных.
Существует три распространенных способа массового удаления данных.
drop table
Этот метод можно использовать, когда таблица не требуется.
truncate table
Удаляет все данные, сохраняя таблицу, быстро.
_Голос за кадром: _Это можно понять как удалить таблицу, а затем создать таблицу.
delete from table
Все данные можно удалить, а таблицы сохранить, но с низкой производительностью.
Вы также можете удалить некоторые данные с очень гибким условием where.
Хотя и усечение, и удаление могут удалить все данные и сохранить таблицу, между ними есть очевидные различия.
один,
truncate — это оператор DDL, т. н. «откат транзакции» отсутствует;
delete — это оператор DML, для которого можно выполнить откат после его выполнения.
два,
Возвращаемое значение усеченной таблицы равно 0;
Возвращаемое значение удаления из таблицы — это количество удаленных строк.
три,
InnoDB поддерживает одну таблицу на файл, когда:
truncate уничтожит таблицу за один раз, не активируя триггер, что очень быстро;
удаление из таблицы удалит строку за строкой, активирует триггер, и скорость будет относительно низкой.
_Голос за кадром: _Данные удаления должны быть зарегистрированы, а таблица усечения не нуждается в регистрации.
Четыре,
Когда в таблице есть столбец, который используется в качестве внешнего ключа другой таблицей:
усечение не удастся;
удалить получится.
_Голос за кадром: _При таком сбое удаления данных легко обнаружить проблему, поскольку сообщение об ошибке простое и понятное.
пять,
Когда в таблице есть столбцы с автоинкрементом:
truncate восстановит количество столбцов с автоинкрементом;
После удаления всех данных автоматически увеличивающийся счетчик столбцов не начинается с нуля.
_Голос за кадром: _Поэтому после удаления всех данных поведение автоматического увеличения количества столбцов часто не соответствует желанию пользователя, поэтому это потенциальная ловушка.
Есть ли что-нибудь, чтобы выиграть в эту минуту?
Пожалуйста, выберите способ удаления данных в соответствии с вашим собственным бизнес-сценарием.
Архитектор дороги- Делитесь техническими идеями
Статьи по Теме:
"буфер записи (буфер изменения)》
домашние вопросы:
В эксперименте в начале, каковы идентификаторы трех строк записей в последней таблице?
_Голос за кадром: _Вы считаете, что статья говорит вам принцип, и вы можете правильно ответить?