Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Насколько безопасен данный код? / 4 сообщений из 4, страница 1 из 1
17.05.2018, 18:16
    #39646315
527470
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько безопасен данный код?
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
PROCEDURE addNewUserData(IN arg_id BIGINT UNSIGNED, IN arg_data VARCHAR(255))
BEGIN
  --уникальны по id пользователя
  INSERT IGNORE INTO users (idUser, `data`)
    VALUES (arg_id, arg_data);
  IF ROW_COUNT() = 0 THEN
    INSERT INTO reservedData (`data`, `lock`) VALUES (arg_data, 0);
  END IF;
  SELECT u.`data` FROM users u WHERE u.idUser = arg_id;
END

PROCEDURE getUserDataById(IN arg_id BIGINT)
BEGIN
  DECLARE lockValue bigint;
  IF NOT EXISTS (SELECT 1 FROM users u WHERE u.idUser = arg_id) THEN
    UPDATE sequence SET id = LAST_INSERT_ID(id + 1) WHERE type = 1;
    set lockValue:= LAST_INSERT_ID();
    START TRANSACTION;
      UPDATE reservedData a SET `lock` = lockValue WHERE `lock` = 0 LIMIT 1;
      INSERT IGNORE INTO users (idUser, `data`) 
        SELECT arg_id, a.`data` FROM reservedData a
          WHERE a.`lock` = lockValue;
      IF ROW_COUNT() = 0 THEN
        UPDATE reservedData a SET `lock` = 0 WHERE `lock` = lockValue;
      ELSE
        DELETE FROM reservedData WHERE `lock` = lockValue;
      END IF;
    COMMIT;
  END IF;
  SELECT u.`data` AS `data` FROM users u WHERE u.idUser = arg_id;
END



Что хотел достичь данным кодом: где-то на стороне генерятся данные, по запросу от пользователя, если пользователь запрашивает несколько раз, то ему должны придти одинаковые данные в ответ, если получилось так что для одного пользователя сгенерировали несколько раз данные, то помещаем их в отдельную таблицу и "лишние" данные потом привязываем к другому пользователю, без генерации на стороне. Собственно интересует всё ли нормально в этом коде или может что нужно подправить или есть вообще более правильный вариант реализации подобного?
Сейчас используется так:
вызываем getUserDataById, если ничего не вернуло, то генерим данные, сохраняем через addNewUserData и результат который получили возвращаем пользователю.
...
Рейтинг: 0 / 0
17.05.2018, 18:49
    #39646328
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько безопасен данный код?
527470,

безопасен от чего?
...
Рейтинг: 0 / 0
17.05.2018, 19:14
    #39646341
527470
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько безопасен данный код?
вадя,

От взаимных блокировок, а также выполняет ли он поставленную задачу?
...
Рейтинг: 0 / 0
17.05.2018, 21:53
    #39646390
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Насколько безопасен данный код?
527470а также выполняет ли он поставленную задачу?это тебе виднее
527470От взаимных блокировокпроверь
...
Рейтинг: 0 / 0
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Насколько безопасен данный код? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]