Насколько я понимаю, глобальный объект $wpdb использует только одно соединение MySQL под капотом (по умолчанию). Поскольку объект является глобальным, любой другой плагин/тема/что угодно, похоже, использует это соединение.
Мой вопрос: безопасно ли использовать транзакции MySQL с этим или другие плагины/WordPress сами по себе могут мешать моим транзакциям?
Чтобы представить, как это может выглядеть:
global $wpdb;
$wpdb->query('START TRANSACTION');
$wpdb->query(...);
$wpdb->query(...);
// ... and so on
if ( $condition ) {
$wpdb->query('COMMIT'); // commit all queries
} else {
$wpdb->query('ROLLBACK'); // rollback everything
}






PHP по своей природе является однопоточным. Кроме того, транзакция ограничена областью действия соединения, в котором она создана.
Если вы пишете PHP-функцию, которая запускает и фиксирует транзакцию без вызова другого плагина, другой плагин никак не может помешать вашей транзакции. Другие плагины могут быть вызваны WordPress до или после вашей функции, но не во время.
Другие запросы PHP, выполняющиеся одновременно, будут иметь собственное соединение с базой данных (соединения не могут быть разделены между запросами PHP), а транзакции не могут охватывать несколько соединений.
Спасибо!! Я даже не думал об этом.