- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
В коде PHP выполняется два SQL запроса
-----------------------------------------
Первый запрос SELECT table1...
....
код PHP
...
Второй запрос INSERT table1...
-----------------------------------------
Как гарантированно сделать так чтобы пока выполнялся php-код между select и insert, второй пользователь не повторил эту операцию...
Например:
два пользователя одновременно открыли страницу и одновременно выполнили SELECT, т.е получили однаковые данные, а потом получается два раза в таблицу вставляются одни и те-же данные.
т.е. происходит логическая ошибка в моей задаче
а должно быть так, первый пользователь выполнил select ... insert а потом второй выполняет select ... insert итд третий четверый пятый ....т.е. по очереди
LOCK TABLE?
а если по времени долго выполняется - LOCKать?
я предложил бы...
создать поле в table1 либо доп таблицу
и в нем держать учётку...
т.е.
select table1
update table1 либо insert table2 либо создать файл ...
php код
insert table1
update table1 либо delete table2 либо удалить файл...
нужно также учесть, что возможно PHP код вылетит в Fatal error :)
всё зависит от задачи...
каждый пользователь будет в своей сессии. Каждый инсерт вставит новую строку... в чем проблема? Не хотите дублей - делайте проверку на уникальность записей.
а потом получается два раза в таблицу вставляются одни и те-же данные.
Напишите, что за данные записываете в таблицу.
я предложил бы...
создать поле в table1 либо доп таблицу
Я честно говоря не понял, и в чем смысл, что помешает, внести одинаковые данные? Или запросил - удалил? Но ведь запросить в теории они могут одновременно...
Уникальность можно проверить и на уровне mysql, поставьте UNIQUE KEY для уникального поле записи
siv1987, возможно есть задания... и они должны выполняться по очереди разными пользователями... т.е. если одному дали, чтоб второму не дать (помечаем так сказать те строки которые обрабатываются)...
также перед записью проверять а нет ли того что хотим записать...
надо оценивать вероятность одновременных запросов...
например при регистрации пользователя проверяю нет ли такого в БД - только потом записываю... и не использую UNIQUE KEY
возможно мой косяк, есть куда расти :)
START TRANSACTION;
... всякие запросы в базу
COMMIT;
Для начала уточните тип таблицы.
Далее или локать или запускать транзакцию.
Основное - понять потенциальную нагрузку на данный участок кода, чтобы не собирать длинных очередей на транзакции. Ну и оптимизировать, чтобы обработка одного действия была минимальной. Тут надо оптимально подойти в первую очередь к структуре таблицы и данных, ключам, настройкам сервера, чтобы время и на вставку и на селект было минимально возможным.
Если это не высоконагруженный проект - можно забить на это дело и просто локать или запускать транзакцию.
Вероятно вам нужен SELECT FOR UPDATE
http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html
что-то вроде:
Да разницы нет особой, главное чтобы Innodb был тип