Очистить всё

Давеча наступила на грабли. Хорошие такие грабли, острые. Конечно данные грабли широко известны, но вдруг кто-то, как и я, про них не помнит (ведь знала, знала! но забыла 🙁 ). Поэтому рассказываю.

Понадобилось мне удалить все записи из таблицы. Вроде бы операция проще некуда:
TRUNCATE TABLE «имя таблицы»
либо
DELETE FROM «имя таблицы».

И черт меня дернул использовать первое! Ибо сказано в писании: Операция TRUNCATE, в отличие от DELETE, не записывает в журнал событий удаление отдельных строки, поэтому не активирует триггеры на событие DELETE. Удаление записей без срабатывания триггеров вызвало в дальнейшем несостыковку в реестре складского учета (см. здесь). К счастью, легко устранимую в данном случае. Но всё же…

Есть и другие отличия TRUNCATE и DELETE, например при TRUNCATE обнуляются поля с autoincrement (что мне собственно и было нужно). Помни это каждый сын, знай любой ребенок.

One Response to “Очистить всё”

  1. Евгений Мокеев:

    Можно сделать делать вот такую замену truncate:
    DELETE FROM table;
    ALTER TABLE table AUTO_INCREMENT=1;

Коментарии