| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > PHP: Базы Данных > Блокировка данных |
| Автор: bagos 6.9.2011, 14:48 |
| Всем привет, в пхп новичок да и с бд mysql мало знаком. Делаю простенький движок для сайта. Проектируя бд, встал вопрос: существует ли какая то блокировка таблиц или записей, ведь если один пользователь изменяет данные, а другой в это время тоже захочет их изменить, то получится белеберда в базе. Уверен что есть какие то инструменты или операторы позволяющие делать "блокировку". В какую сторону копать что читать. Заранее спасибо. Буду рад любой полезной информации. Добавлено через 5 минут и 32 секунды для подключения к бд и работе с запросами использую библиотеку dbsimple http://dklab.ru/lib/DbSimple/manual.html можно ли с помощью нее производить блокировку? |
| Автор: solenko 6.9.2011, 16:46 |
| читать, как обычно, в сторону мануала http://dev.mysql.com/doc/refman/5.1/en/innodb-transaction-model.html |
| Автор: MuToGeN 6.9.2011, 18:05 |
| 1. Блокировка существует 2. В случае MySQL этим вопросом занимается сам MySQL (велосипедов изобретать не стоит) 3. Нюансы зависят от движка (к примеру, table-level locking в случае MyISAM и row-level locking для InnoDB) |
| Автор: bagos 20.9.2011, 11:57 |
| Попробую более детально описать задачу чтобы вы мне точно могли ответить нужна ли вообще в моем случае блокировка. Схема проста: 1) Есть таблица пользователей users (id, login, pass, etc....) 2) Есть таблица новостей news (id, title, text, date, author_id, ...etc...) Каждый из пользователей может добавлять новости, скажем их 10-20 и каждый вносит в базу отсебятину. При этом они могут изменять\добавлять\удалять записи. Добавляться записи будут часто, удаляться и редактироваться крайне редко. Нужны ли в таких случаях механизмы блокировок? новости выводятся на страницу для простых пользователей select * from news; зарег. пользователям новости также выводятся select * from news, апдейтятся UPDATE news SET title,..... WHERE id=? использую MySQLi хотелось бы реальный примерчик, уверен многие с этим сталкивались и могут поделиться опытом и да мануал читал в инете шарился, инфы почему то мало :( На дом. компьютере стоит денвер, знаю что не лучший вариант. InnoDb отключен |
| Автор: MuToGeN 22.9.2011, 11:37 |
| Обычно решается следующим образом: В таблицу news добавляем два поля, типа locked_by INT и locked_date DATETIME При открытии в админке формы для редактирования новости в первое поле пишем id юзера, во второе - NOW(). При выдаче списка новостей со ссылками "редактировать" проверяем locked_by и locked_date (допустим, если было залочено более часа назад, то считаем, что юзер открыл страницу редактирования и закрыл вкладку браузера) и в случае чего пишем, мол, "в данный момент поправить не судьба, т.к. эту новость правит кто-то другой". Соответственно, сохранить может только тот, на кого залочено (или кто угодно, если запись считаем разлоченной по таймауту). Вот как-то так. |
| Автор: bagos 22.9.2011, 14:26 |
| Спасибо, MuToGeN, думаю так и сделаю. |