@fuckyep said in Как вывести глобальную переменную в нужном месте в веб интерфейсе?:
Как вывести глобальную переменную в нужном мне месте в веб интерфейсе?
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
@sergerdn В смысле? Если запрос идёт с проверкой на поле Лок? Каждый запрос многопотока - проверяет есть ли в поле Лок 1 - они все в очереди. Первый записал, второй не взял....
Есть вариант, что я неправильно тебя понял. Напиши последовательность sql запросов.
Обновляем запись в которой поле Лок =0 меняем на 1, в ответе получили айди записи? Все делаем с ней что хотим. Другой поток ее уже не трогает, так как она не попадает в условие выборки.
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
Обновляем запись в которой поле Лок 0 меняем на 1, в ответе получили айди записи? Все делаем с ней что хотим. Другой поток ее уже не трогает, так как она не попадает в условие выборки.
Дай пример запроса UPDATE, где ты в ответе получаешь id обновленной записи. Потому что у меня какая-то другая БД.
MariaDB [wordpress]> select * from wp_users;
+----+------------+------------------------------------+---------------+--------------------+-------------------------+---------------------+---------------------+-------------+--------------+
| ID | user_login | user_pass | user_nicename | user_email | user_url | user_registered | user_activation_key | user_status | display_name |
+----+------------+------------------------------------+---------------+--------------------+-------------------------+---------------------+---------------------+-------------+--------------+
| 1 | moderator | $P$B/qpWWZ5C./khtr3h03W5S2sEbvW/ | moderator | ghtrhgtrhtrhtr@gmail.com | https://coolwp.com | 2021-11-12 21:16:43 | | 0 | moderator |
+----+------------+------------------------------------+---------------+--------------------+-------------------------+---------------------+---------------------+-------------+--------------+
1 row in set (0.000 sec)
MariaDB [wordpress]> update wp_users set user_email="blaaaa@local";
Query OK, 1 row affected (0.001 sec)
Rows matched: 1 Changed: 1 Warnings: 0
MariaDB [wordpress]>
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
@sergerdn индекс есть?
CREATE TABLE `wp_users` (
`ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`user_login` varchar(60) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`user_pass` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`user_nicename` varchar(50) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`user_email` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`user_url` varchar(100) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`user_registered` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
`user_activation_key` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
`user_status` int(11) NOT NULL DEFAULT 0,
`display_name` varchar(250) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '',
PRIMARY KEY (`ID`),
KEY `user_login_key` (`user_login`),
KEY `user_nicename` (`user_nicename`),
KEY `user_email` (`user_email`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
@sergerdn Завтра гляну, с телефона сам понимаешь.
Не понимаю, так как мне неизвестно, чтобы UPDATE возвращал что-то сверх того, что я дал выше. Я понимаю, что я не DBA и легко могу не знать что-то и это прям нормально. Всего знать невозможно. Поэтому я и попросил пример запроса UPDATE , где он возвращает id обновленных записей.
Следующим запросом можно получить инфу, что обновилось, но это будет следующий запрос и мы опять наткнулись, что другой поток может между двумя запросами вмешаться и сделать свою работу. Тогда мы получим не то, что ожидаем.
Щас глянуть не могу, что он возвращает в ответ, но можно писать ведь не 1, а номер потока к примеру, или рендом. И по этому числу искать запись. Проверю завтра.
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
Щас глянуть не могу, что он возвращает в ответ, но можно писать ведь не 1 а номер потока к примеру, или рендом. И по этому числу искать запись. Проверю завтра.
Да многое можно, а потом посмотреть на свой код и понять, что ты сделал функционал SELECT FOR UPDATE.
P.S.
У меня была такая история.
@Bigma said in Как в SQL сделать сразу несколько запросов в одном действии:
@sergerdn Как ты уже написал, она лочит всю таблицу, имей это ввиду.
Я же сам это написал, конечно я имею в виду. И так же добавил, что эта информация может быть устаревшая и надо ее проверять. Может у современных реализаций INNODB немного не так. Может лочится только одна запись в таблице на чтение. Чтобы другой поток не захватил ее.
Под капотом БД многое что делается, другое дело, что ты не знаешь об этом и "спишь спокойно".
@Shogo, многострочный запрос и несколько запросов в одном, это не одно и тоже, модуль поддерживает многострочные запросы, но не поддерживает несколько запросов в одном, так как либо они не поддерживаются в конкретном диалекте или отключены по умолчанию. Например в MySQL и MariaDB, несколько запросов в одном отключены по умолчанию, а чтобы их включить нужно добавить multipleStatements: true в настройки диалекта.