Blog. Just Blog

Быстрый поиск

Введите фрагмент названия статьи для поиска

Удаление строк из разных таблиц одним запросом

27.10.2021 | Категория: Web-мастеру и не только | Автор: ManHunter
Типичная задача при разработке web-приложений - удаление объекта и связанных с ним свойств, хранящихся в базе MySQL в разных таблицах. Чаще всего это делается несколькими последовательными запросами, типа
  1. DELETE FROM `item_tableWHERE `item_id`=5
  2. DELETE FROM `properties_tableWHERE `property_parent`=5
  3. DELETE FROM `sizes_tableWHERE `size_parent`=5
и т.д. Главная проблема тут даже не в лишних запросах, а в том, что если на каком-либо промежуточном этапе произойдет критическая ошибка, то в базе останутся "зомби" в виде ни к чему не привязанных записей или наоборот, останется родительская запись, у которой уже удалены все связанные свойства. Оба варианта плохие.

Все эти проблемы легко решаются, если запрос на удаление сформировать в следующем виде:
  1. DELETE
  2. `item_table`, `properties_table`, `sizes_table`
  3. FROM
  4. `item_table`, `properties_table`, `sizes_table`
  5. WHERE `item_id`=5
  6. AND `property_parent`=`item_id`
  7. AND `size_parent`=`item_id`
или, если каких-либо связанных записей в базе может не оказаться:
  1. DELETE
  2. `item_table`, `properties_table`, `sizes_table`
  3. FROM
  4. `item_table`
  5. LEFT JOIN
  6. `properties_tableON (`property_parent`=`item_id`),
  7. `sizes_tableON (`size_parent`=`item_id`)
  8. WHERE `item_id`=
Прелесть такого решения заключается в том, что запрос или выполняется полностью или не выполняется совсем, гарантированно обеспечивая целостность данных. Получается что-то вроде транзакции. Ну и код становится гораздо более понятный и красивый.

Просмотров: 373 | Комментариев: 2

MySQL Monitor 1.5

08.08.2020 | Категория: Мои программы | Автор: ManHunter

Скриншот программы MySQL Monitor

Программа MySQL Monitor предназначена для удобного управления сервером MySQL под Windows. Она позволяет запускать или останавливать процесс mysqld.exe с нужными параметрами, отслеживать его состояние, а также запускать консоль MySQL. Запуск MySQL в качестве сервиса не предусмотрен. Управление выполняется через меню в трее, настройки программы хранятся в файле mysqlmon.ini

Читать статью целиком »
Просмотров: 3393 | Комментариев: 11

Как узнать размер базы MySQL

18.06.2019 | Категория: Web-мастеру и не только | Автор: ManHunter

Как узнать размер базы MySQL

Иногда бывает нужным прикинуть размер базы MySQL, который занимает ваш проект. Например, чтобы не вылезти за ограничения хостинга или вовремя обнаружить аномальное разрастание базы в случае программной ошибки, да или просто для спортивного интереса.

Читать статью целиком »
Просмотров: 1098 | Комментариев: 0

Как поменять пароль root на MySQL

24.06.2017 | Категория: Web-мастеру и не только | Автор: ManHunter
На одном из серверов потребовалось сбросить забытый рутовый пароль от MySQL. Сервер крутится на CentOS, рутовый доступ к серверу есть. На всякий случай небольшая шпаргалка для себя, чтобы потом не искать.

1. Останавливаем сервер MySQL

service mysqld stop
2. Запускаем MySQL в безопасном режиме без привилегий

/usr/bin/mysqld_safe -skip-grant-tables -user=root &
3. Заходим в клиент MySQL под пользователем root без пароля

mysql -u root
4. Устанавливаем новый пароль для пользователя root

UPDATE `mysql`.`user` SET `password`=PASSWORD('newpassword') WHERE `user`='root';
5. Сбрасываем привилегии пользователей MySQL

FLUSH PRIVILEGES;
6. Выходим из клиента MySQL

quit;
7. Запускаем сервер MySQL

service mysqld start
После этого можно использовать новый пароль. Для разных версий Linux команды работы с сервисами могут отличаться, здесь пример конкретно под CentOS.

Просмотров: 1316 | Комментариев: 0

Вывод даты из MySQL на русском языке

17.03.2014 | Категория: Web-мастеру и не только | Автор: ManHunter

Вывод даты из MySQL на русском языке

В который раз убеждаюсь, насколько полезно перечитывать мануалы. Обычно на PHP для формирования строки типа "1 Января 2014, Среда" из даты, полученной из базы данных MySQL, приходилось колхозить массивы с названиями месяцев, дней недели и т.п. В MySQL 5.0.25 появилась динамическая переменная lc_time_names, которая отвечает за локаль дней недели, месяцев и сокращений от них. Ее действие распространяется на функции DATE_FORMAT, DAYNAME и MONTHNAME.

Читать статью целиком »
Просмотров: 8019 | Комментариев: 4

prev 01 02 03
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2022
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.12 сек. / MySQL: 3 (0.0505 сек.) / Память: 5 Mb
Наверх