- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Зачем быть уникальным в мире, где все можно скопировать
Почему так важна уникальность текста и как она влияет на SEO
Ingate Organic
В 2023 году 36,9% всех DDoS-атак пришлось на сферу финансов
А 24,9% – на сегмент электронной коммерции
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
Задача. Есть только удаленное подключение к БД, к определенным таблицам.
Есть таблица А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. Снимаю блокировку.
Но как это реализовать и правильно ли так не пойму. Требуется помощь :)
Таблица ААА уже существует, с ней уже работаем, в ней уже есть какие-то записи.
Нужно чтобы начиная с ней работать с любого момента, ID правильно прописывалось.
Имеется только удаленный доступ к одной таблице и все. Я не могу зайти на сервер и что-то там создать.
Известный вариант реализации автоинкремента - создать счетчик. В итоге так и сделаем. Напишу админа сервера, где оракл стоит. Т.е. они создадут счетчик, чтобы было автоинкрементное поле.
Но мне нужно решить также вопрос, исходя из ситуации, что такой счетчик создать невозможно.
---------- Добавлено 03.06.2016 в 08:48 ----------
На форуме sql.ru посоветовали:
2. Если вставкой не занимается "третья сила" (т.е. Вы - единственный писатель, весь код, вставляющий данные в таблицу, Вам подконтролен) - то можно использовать dbms_lock, это даст возможность не препятствовать всяким update.
3. Повесить primary|unique key. Обрабатывать exception dup_val_on_index - зациклить вычисление id и вставку до успеха.
Но как это в SQL командах записать? :(
а что-нибудь типа id INTEGER PRIMARY KEY AUTOINCREMENT в оракле нету, чтоб само id +1 вставляло?
Я не спец по БД ораклу, но в базе, в которой сейчас работаю сделано на триггере и sequence:
а что-нибудь типа id INTEGER PRIMARY KEY AUTOINCREMENT в оракле нету, чтоб само id +1 вставляло?
нету
Я не спец по БД ораклу, но в базе, в которой сейчас работаю сделано на триггере и sequence:
ну вот я же пишу, что так и будет в итоге, но нужно еще одно решение, без счетчика.
Lord Maverik, в оракле это называется sequence. А чтобы он волшебным образом работал так же как mysql нужно сделать trigger, который получает значение из sequence из записывает в поле.
Короче, повеселитесь на славу с этим ораклом. Может бросите?
---------- Добавлено 03.06.2016 в 16:48 ----------
ну вот я же пишу, что так и будет в итоге, но нужно еще одно решение, без счетчика.
Почитал я sql.ru.
Там тоже все считают это бессмысленными телодвижениями, а варианты предложили просто потому что могут, а не потому что следует это делать.
Насколько понимаю, тут надо смотреть в сторону SELECT FOR UPDATE
---------- Добавлено 03.06.2016 в 19:34 ----------
Вот похожее: http://www.sql.ru/forum/1004745/blokirovka-na-chtenie-tablicy
остановились на Dbms_lock, http://my-oracle.it-blogs.com.ua/post-42.aspx