Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.08.2016, 15:13   #1
Illusiony
Форумчанин
 
Регистрация: 17.02.2014
Сообщений: 881
По умолчанию Как прочитать из таблицы данные и добавить к ним новые, при этом заблокировать таблицу на время этих действий

Имеется табличка HSCrab :
Код:
`status` TINYINT (1) NOT NULL ,
  `data_xod` TIMESTAMP NOT NULL default '0000-00-00 00:00:00',
  `str_click` VARCHAR(60)NOT NULL ,
  `c_p` CHAR(32)NOT NULL ,
  `x` SMALLINT UNSIGNED NOT NULL ,
  `y` SMALLINT UNSIGNED NOT NULL 
)
ENGINE = MEMORY
DEFAULT CHARACTER SET = utf8
COLLATE = utf8_general_ci");
Необходимо прочитать из нее str_click, добавить к нему еще символы и перезаписать полученную строку обратно в str_click. При этом чтобы таблица была заблокирована и на чтение и на запись и на TRUNCATE во время всей операции.

И еще похожую операцию: прочитать str_click передать в переменную php и очистить str_click в таблице и вставить текущее серверное время в data_xod. Также чтобы таблица была заблокирована аналогично предыдущей задачи.

Если бы там были цифры то
Код:
UPDATE persondata SET age=age+1;
но аналогично с строкой не получается , через CONCAT тоже.
Может быть проблема в том что всего 1 строка в таблице.

Сам мучился, но так ничего не сделал Не думайте что я не пытался и тупо хочу все сразу на блюдечке. Реально замонался.

Последний раз редактировалось Illusiony; 13.08.2016 в 15:32.
Illusiony вне форума Ответить с цитированием
Старый 06.09.2016, 06:30   #2
dbalor
Форумчанин
 
Аватар для dbalor
 
Регистрация: 06.09.2016
Сообщений: 198
Сообщение

Копай в сторону транзакции.

Последний раз редактировалось dbalor; 06.09.2016 в 06:37.
dbalor вне форума Ответить с цитированием
Старый 12.09.2016, 05:16   #3
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Если бы там были цифры то
Код:
UPDATE persondata SET age=age+1;
но аналогично с строкой не получается , через CONCAT тоже.
Может быть проблема в том что всего 1 строка в таблице.
Странно, а у меня всё получается:
PHP код:
UPDATE  HSCrab SET str_click=CONCAT(str_click'string_to_add'
только проапдейтятся все записи в таблице. Если там 1 строка - всё нормально, или надо ставить условие where

Особых проблем с LOCK TABLES тоже не встречал - работает как описано в документации MySQL.

Цитата:
Сообщение от Illusiony Посмотреть сообщение
Реально замонался.
А вы где и как всё это тестируете, на реальном хостинге и с помощью php-скрипта?

Последний раз редактировалось predefined; 12.09.2016 в 05:24.
predefined вне форума Ответить с цитированием
Старый 13.09.2016, 18:39   #4
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

И непонятно, почему вы решили пойти таким сложным путём - одна строка таблицы и данные дописывать в одну и ту же ячейку?

Пишите данные - каждый пакет в отдельную строку таблицы.
Приложение 1 - вставляет пришедшие данные, каждое - в свою строку.
Приложение 2 спокойно читает строки, сортируя их по ID или по времени прихода данных. А после обработки - стирает за собой эту строку.
Если таблица пуста - Приложение 2 просто уходит на тайм-аут и ждёт.

Так они совершенно не будут мешать друг другу, и все необходимые блокировки MySQL сделает сам. Он просто не даст прочитать "недозаписанные" данные Приложению 2.
predefined вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавить данные в таблицу при нескольких условиях Shouldercannon PHP 1 20.11.2014 16:29
Как создать таблицу, используя данные из другой таблицы? re1ax SQL, базы данных 2 11.12.2011 12:22
Как прочитать данные поля BYTES таблицы Paradox в Delphi dennsyss БД в Delphi 0 19.08.2010 21:23
Как при запросе открыть таблицу Repair и добавить в неё новые данные, согласно этого листинга. TitAn БД в Delphi 2 11.06.2007 10:07