|
MySQL: Как получить id строки если она нашлась но не изменилась при UPDATE? | ☑ | ||
---|---|---|---|---|
0
D_Pavel
01.08.16
✎
10:42
|
Такая таблица:
id user status 1 Вася 1 2 Петя 0 3 Вася 1 4 Петя 1 Такой запрос: UPDATE tabl SET status = 1 WHERE user = 'Петя' limit 1; select last_insert_id(); Как получить id строки если она полошла по условиб, но не изменилась при UPDATE? |
|||
1
D_Pavel
01.08.16
✎
10:43
|
ЗЫ: В SET забыл указать что есть еще id = LAST_INSERT_ID(id)
|
|||
2
orefkov
01.08.16
✎
10:47
|
Тут надо для начала СУБД указать.
|
|||
3
D_Pavel
01.08.16
✎
10:48
|
Сложность задачи в том, что до этого запроса могли быть другие запросы, которые могли повлиять на результат выполнения строки: select last_insert_id();
То есть не понятно, она вернула нужный мне id или какой-то другой. |
|||
4
D_Pavel
01.08.16
✎
10:48
|
(2) MySQL из заголовка темы
|
|||
5
hitodom
01.08.16
✎
10:49
|
сделай селект то апдейта
|
|||
6
Asmody
01.08.16
✎
10:50
|
(3) В транзакцию завернуть?
|
|||
7
orefkov
01.08.16
✎
10:50
|
(4)
Каюсь, ступил. (3) Сделать так, чтобы строка всегда изменялась. Например, иметь поле version зачастую очень полезно и для других задач. При каждом изменении делать set version = version + 1. Можно даже триггер для этого на апдейт навесить. |
|||
8
Ёпрст
01.08.16
✎
10:51
|
(0) посмотреть select row_count()
|
|||
9
Gary417
01.08.16
✎
10:51
|
(7) <Сделать так, чтобы строка всегда изменялась.>
помоему это не очень правильно при большом количестве запросов |
|||
10
D_Pavel
01.08.16
✎
10:52
|
(5) Не пойдет, сразу после селекта другой запрос из другого скрипта может изменить ту же самую строку.
Несколько конкурирующих скриптов забирают из таблицы строки для обработки. Ставят статус 1 чтобы другой скрипт эту строку уже не забрал себе. |
|||
11
D_Pavel
01.08.16
✎
10:53
|
(6) Если ничего лучше не придумаю, то остается только так
|
|||
12
D_Pavel
01.08.16
✎
10:55
|
(7) таблицу придется изменить. нет лишних колонок. Придется добавлять новую
|
|||
13
mkalimulin
01.08.16
✎
10:55
|
(0) Получи список строк, которые не БУДУТ меняться. ПЕРЕД апдейтом.
|
|||
14
D_Pavel
01.08.16
✎
10:56
|
(13) зачем?
|
|||
15
orefkov
01.08.16
✎
10:56
|
(9)
Неправильно апдейтить записи с неизменёнными данными. А рез человек записи апдейтит, значит, ему именно апдейтить и нужно. |
|||
16
mkalimulin
01.08.16
✎
10:57
|
(14) Ты получишь строку, которая подойдет по условию но не будет меняться. Ты же этого хотел, нет?
|
|||
17
Остап Сулейманович
01.08.16
✎
11:00
|
Я может чего не понял. Но. Нигде не изменяется id. И это правильно. В таком варианте никакого нового id у строки не будет. И чего апдейтили того и имеем. Тем более при условии Лимит = 1. Селект с тем же условием и теми же индексами даст именно ту же строку.
|
|||
18
hitodom
01.08.16
✎
11:17
|
делай update
where status <> новый статус |
|||
19
D_Pavel
01.08.16
✎
11:32
|
Всем спасибо, вроде разобрался
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |