|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
16.12.2010, 15:59 | #1 |
Пользователь
Регистрация: 28.01.2008
Сообщений: 66
|
Ключ последней обновленной записи
Доброго времени суток!
Есть необходимость получить ключ последнее измененной записи с помощью UPDATE. А точнее сначала обновить запись, потом ее выбрать. Очень важна точность и скорость, т.к. с таблицей одновременно работают 20 человек, в таблице 100 тыс. записей. Не нашел встроенного решения, потому на данный момент думаю в сторону следующей структуры: r = генерим случайное число; Код:
Была бы цель - и всё получится!
|
16.12.2010, 16:03 | #2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
А какая СУБД?
|
17.12.2010, 13:58 | #3 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
вот сижу 2й день и пытаюсь понять - что же на самом деле хотел ТС?
если запись меняли, то у нее есть ключевое поле, по которому ее подтягивали для изменений, иначе поменяют не одну конкретную запись, а несколько или вообще все если нужны записи, которые поменял кто-то и совсем недавно, то в субд есть временные штампы - нужно под это дело завести отдельную колонку в табличке, например, date_modified date и туда на триггере при апдейте писать sysdate (или что там предусмотрено вашей субд - дату и время в одном поле) и плюс к этому еще и писать юзера, внесшего изменения (опять же многие субд имеют эти сведения) |
17.12.2010, 14:44 | #4 | |
Пользователь
Регистрация: 28.01.2008
Сообщений: 66
|
Serge_Bliznykov
Мои извинения, сервер MS SQL 2000. soleil@mmc Сегодня как раз думал о том, чтобы при update в доп. поле вписывать уникальный ID, составленный из дата-время-юзер. Только не user БД, а id, под которым зашли на веб-интерфейс. Думая трезво, понимаю, что это самый точный и надеженый способ из мне известных, но самый ли быстрый... Цитата:
Вообще суть в том, чтобы взять строку и изменить поле, по которому она была выбрана, чтобы эта же строка не вышла у другого пользователя, который работает параллельно. Вот алгоритм текущей работы: Код:
Потому, пока не вижу другого выхода, как сначала унифицировать и заблочить запись, а потом выбрать ее для работы. Есть ли другое решение ?
Была бы цель - и всё получится!
Последний раз редактировалось masterdela; 17.12.2010 в 16:29. |
|
17.12.2010, 16:07 | #5 | ||
Пользователь
Регистрация: 28.01.2008
Сообщений: 66
|
Упс. Теоретически где-то читал про конструкцию вида
Цитата:
Цитата:
Была бы цель - и всё получится!
Последний раз редактировалось masterdela; 17.12.2010 в 16:28. |
||
17.12.2010, 17:55 | #6 |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
кто о чем, а вшивый о бане...
сначала ответьте на вопрос "зачем это все нужно?" я не изучал механизма блокировок/защелок на мсскуэле, но есть подозрение что все несколько проще чем тут приведено нужно лочить записи при редактировании? ну и делай при попытке открыть запись на редактирование так: 1) попытка залочить запись update table set lock_user = user where id = ... and lock_user is null 2) далее проверка кем реально залочена запись select lock_user from table where id = ... и дальше если это текущий юзер, то разрешать редактировать, если нет, то бай-бай и не забыть разлочить запись после редактирования |
17.12.2010, 22:17 | #7 |
Пользователь
Регистрация: 28.01.2008
Сообщений: 66
|
soleil@mmc
Я вроде бы максимально описал, что мне нужно (2 поста выше). Вы совсем о другом мне говорите. Под "заблочить" я имею ввиду изменить поле Status=1, по которому она была выбрана, чтобы под следующую выборку SELECT TOP 1 * FROM Table WHERE Status=0 она не попала.
Была бы цель - и всё получится!
Последний раз редактировалось masterdela; 17.12.2010 в 22:19. |
18.12.2010, 15:47 | #8 | |
SQL-коддинг
Участник клуба
Регистрация: 16.01.2009
Сообщений: 1,192
|
Цитата:
я так понял что вы там нашли себе что-то где-то в кач-ве возможного решения и теперь уперлись в его реализацию я же просто смотрю со стороны: есть обновленная запись, у нее есть пара полей со штампом времени изменения и тем кто их сделал делаем запрос с сортировкой/фильтрацией по дате-время и пользователю и вот наш курсор из н-записей (>=0) о какой производительности идет речь если система нагруженная? здесь нужно обрабатывать данные пошагово - пока выполняется ваш любой запрос юзеры уже вбивают свои изменения и отправляют их на сервак. в данном случае получается классический стек. только остается неясным вопрос - ну получили инфу о последней обновленной записи и что с ней дальше делать? может достаточно будет триггер заюзать? или в мсскуле с триггерами беда? |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выборка по последней дате | Ceme4kin | Microsoft Office Access | 2 | 12.11.2010 19:51 |
отображение последней ячейки столбца | hipper | Microsoft Office Excel | 4 | 12.07.2010 13:40 |
Чтение из типизированного файла с последней записи и до первой | vmilyoshin | Помощь студентам | 7 | 28.04.2010 15:34 |
присвоить переменной значение поля в последней записи таблицы | KaimNotark | БД в Delphi | 1 | 03.02.2010 07:21 |
Поиск последней записи в определенной строке | Maxx | Microsoft Office Excel | 5 | 04.03.2009 14:01 |