|
|
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
Задача. Есть только удаленное подключение к БД, к определенным таблицам. Есть таблица АAA. Записать в нее данные, с уникальным полем ID. Как я делаю сейчас: 'SELECT * FROM (SELECT ID FROM AAA ORDER BY ID DESC) WHERE ROWNUM <= 1'; Получив ID, увеличиваю его на 1. $id++; Далее вставляю запись. 'INSERT INTO AAA (ID,DATA) VALUES ($id,$data)'; По коду конечно отличается немного, суть такая, упростил для понимания. Возникла проблема - в процессе работы появились записи с дублирующим ID. Как избежать этого? Я с Ораклом глубоко на "вы", работаю с mysql. Думаю может надо так: 1. определяю, заблокирована таблица или нет. если да, то выходим. 2. ставим блокировку таблицы. 3. определяю новое ID 4. вставляю запись 5. Снимаю блокировку. Но как это реализовать и правильно ли так не пойму. Требуется помощь :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 09:58:35 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
lexxvladКак избежать этого? почитать про key fields и sequence. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 10:10:18 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 10:15:48 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
2 lexxvlad 123ййlexxvladКак избежать этого? почитать про key fields и sequence. + про returning кляузу в sql dml ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 10:20:25 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
Внесу условие. Таблица ААА уже существует, с ней уже работаем, в ней уже есть какие-то записи. Нужно чтобы начиная с ней работать с любого момента, ID правильно прописывалось. Имеется только удаленный доступ к одной таблице и все. Я не могу зайти на сервер и что-то там создать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 10:51:57 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
Я еще не зря написал написал, что с Ораклом на Вы. Мне по работе нужно ложить записи в одну таблицу и все. Все остальное делаем на мускуле. Если кто-то поможет написать конкретный запрос - большое ему за то спасибо :) Так вещи типа: автор+ про returning кляузу в sql dml я даже не знаю, что об ентом думать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 10:53:52 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
lexxvlad Я не могу зайти на сервер и что-то там создать. Лучше все таки один раз создать (хотя бы через DBA), чем постоянно мучаться с блокировками таблицы и, как следствие, тормозами в работе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 10:56:10 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
tru55lexxvlad Я не могу зайти на сервер и что-то там создать. Лучше все таки один раз создать (хотя бы через DBA), чем постоянно мучаться с блокировками таблицы и, как следствие, тормозами в работе. С этим моментом решим через админа сервера, где оракл стоит. Т.е. они создадут счетчик, чтобы было автоинкрементное поле. Но мне нужно решить также вопрос, исходя из ситуации, что такой счетчик создать невозможно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:02:38 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
lexxvladНо мне нужно решить также вопрос, исходя из ситуации, что такой счетчик создать невозможно. Это как ехать на велосипеде без педалей ) Нет. Хуже. Без колес ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:05:27 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
авторИмеется только удаленный доступ к одной таблице что вы под этим подразумеваете ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:20:07 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
AvotgelexxvladНо мне нужно решить также вопрос, исходя из ситуации, что такой счетчик создать невозможно. Это как ехать на велосипеде без педалей ) Нет. Хуже. Без колес ))) Пуская так, но нужно автономное решение. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:28:17 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
123ййавторИмеется только удаленный доступ к одной таблице что вы под этим подразумеваете ? Я немогу зайти в DBA (или как там оно называется). И у меня есть доступ только к одной таблице AAA и все. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:29:28 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
lexxvladНо мне нужно решить также вопрос, исходя из ситуации, что такой счетчик создать невозможно. 1. Брать lock table in exclusuve mode перед вставкой. И пусть весь мир подождет. 2. Если вставкой не занимается "третья сила" (т.е. Вы - единственный писатель, весь код, вставляющий данные в таблицу, Вам подконтролен) - то можно использовать dbms_lock, это даст возможность не препятствовать всяким update. 3. Повесить primary|unique key. Обрабатывать exception dup_val_on_index - зациклить вычисление id и вставку до успеха. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:30:28 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
andrey_anonymouslexxvladНо мне нужно решить также вопрос, исходя из ситуации, что такой счетчик создать невозможно. 1. Брать lock table in exclusuve mode перед вставкой. И пусть весь мир подождет. 2. Если вставкой не занимается "третья сила" (т.е. Вы - единственный писатель, весь код, вставляющий данные в таблицу, Вам подконтролен) - то можно использовать dbms_lock, это даст возможность не препятствовать всяким update. 3. Повесить primary|unique key. Обрабатывать exception dup_val_on_index - зациклить вычисление id и вставку до успеха. Буду очень признателен, если это в запросах покажете :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:31:45 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
lexxvladЯ немогу зайти в DВАа ты ей водки налей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:34:56 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
lexxvladЯ немогу зайти в DBA (или как там оно называется). И у меня есть доступ только к одной таблице AAA и все. DBA, синонимы: 1. DBA - database administrator - администратор базы данных - АБД - ЧЕЛОВЕК, занимающийся всеми вопросами эксплуатации БД. 2. DBA, nata1111 - уважаемый специалист, автор широко известных в узких кругах эпохальных трудов по reverse engineering структур данных oracle rdbms 3. DBA - роль в rdbms Oracle 4. dba, ORA_DBA - группа ОС, позволяющая локально заходить as sysdba без ввода пароля ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:36:12 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
andrey_anonymousDBA, синонимы: Читать: омонимы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:38:12 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
Может такой жескач попробовать? )) Код: plsql 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. 32. 33. 34. 35. 36. 37. 38. 39. 40. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:45:11 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
AvotgeМожет такой жескач попробовать? )) Я в свое время делал что-то похожее. Лет 20 назад. Правда на Clipper-е :)) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 11:57:56 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
tru55Правда на Clipper-е :)) Порой и сейчас бы охота что-то такое в минимализме, прямое и квадратное ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 12:14:23 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
AvotgeМожет такой жескач попробовать? ))если ТС не может создать сиквенс, думаете он может создать таблицу? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 14:06:14 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
lexxvlad.. Так вещи типа: автор+ про returning кляузу в sql dml я даже не знаю, что об ентом думать :) ну, сегодня погода шепчет , попробую разжевать 1) ваши потуги из стартового поста - вам надо выбросить и забыть 2) как выше писали - у оракла есть способы генерации неповторяющихся идентификаторов 3) например, объект sequence, генерирующий неповторяющееся число (элемент ряда, например натуральных чисел) обращение к функции, извлекающей из того самого sequence то самое следующее неповторяющееся число можно использовать непосредственно в командах sql dml Код: plsql 1. смысл использования returning clause в том, чтобы (если вам надо) вернуть в например переменную вашей программы, то самое число, которое ( было внутри sql-команды insert получено из sequence и) использовано. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 14:10:43 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
Avotge, курсор, опен, фетч, апдейт коммит и без клозе вместо одного апдейта. демонстрацию неотлаженного и неоптимального алгоритма замены создания сиквенса созданием таблицы выгоднее демонстрировать менее формальным языком, чем plsql. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 14:36:57 |
|
||
|
Вставка записи с автоинкрементом с блокировкой
|
|||
|---|---|---|---|
|
#18+
комувместо одного апдейта Ну да типа Код: plsql 1. На то он и есть жескач и да не отлаженный и не оптимальный и вообще plsql ) А какие более нормальные варианты не plsql? select max() с попытками блокировки таблицы? ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.06.2016, 16:01:51 |
|
||
|
|

start [/forum/topic.php?fid=52&msg=39249927&tid=1888154]: |
0ms |
get settings: |
12ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
86ms |
get tp. blocked users: |
2ms |
| others: | 210ms |
| total: | 395ms |

| 0 / 0 |
