Как использовать оператор "TRUNCATE TABLE" в MySQL?

26 апр. 2012 г., 11:18:20
Просмотры: 20.6K
Голосов: 5

Я пробовал использовать dbDelta и $wpdb->query, но они не работают. У кого-нибудь есть идеи?

1
Комментарии

Какая ошибка? Вы можете вывести её следующим вызовом сразу после выполнения запроса: $e = $wpdb->query($sql); die(var_dump($e));

Thomas Thomas
26 апр. 2012 г. 11:47:24
Все ответы на вопрос 3
0
12

Как показала практика, TRUNCATE ГОРАЗДО ЛУЧШЕ, чем DELETE, потому что DELETE ломает сайт, а TRUNCATE просто очищает таблицу. Вот рабочий код:

global $wpdb;

$wpdb->query('TRUNCATE TABLE wp_posts');
20 дек. 2013 г. 23:23:52
5

Согласно этому сообщению на форуме, оператор TRUNCATE не работает. Я предполагаю, что поскольку это такой разрушительный запрос, он фильтруется классом. Также есть этот пост в Trac, который, если я правильно понимаю, запрещает DDL-операторы.

26 апр. 2012 г. 16:33:01
Комментарии

Ну, может быть, я использую DELETE вместо truncate.

goodseller goodseller
26 апр. 2012 г. 17:51:54

@goodseller Не уверен, что именно вы пытаетесь сделать, поэтому, возможно, это для вас не важно — но учтите, что DELETE не сбрасывает автоинкрементные колонки. Так что даже если ваша таблица будет пуста, следующий ID элемента продолжит с того места, где остановилось последнее автоинкрементное значение.

MathSmath MathSmath
26 апр. 2012 г. 22:53:18

@MathSmath Да~ Это правда, действительно так. Но есть ли какой-то способ сделать это?

goodseller goodseller
27 апр. 2012 г. 07:02:01

Я нашёл решение: $wpdb->query("ALTER TABLE tableName AUTO_INCREMENT=0") Спасибо @MathSmath :)

goodseller goodseller
27 апр. 2012 г. 08:37:57
  1. код из связанной записи на форуме не работал из-за опечатки. 2. тикет в треке только обсуждает возвращаемые значения от DDL-запросов.
skndstry skndstry
13 сент. 2016 г. 12:03:29
0

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

Поэтому делюсь правильным способом очистки таблицы.

   global $wpdb;
   $table_name = $wpdb->base_prefix.'name_of_table_without_prefix';
   $wpdb->query("TRUNCATE TABLE $table_name");
19 окт. 2021 г. 15:47:20