2015-10-12 3 views
-2

Я работаю над проектом, и у меня есть раздел регистрации участников, чтобы вставлять пользователей в мою таблицу. Но я не хочу вставлять одни и те же данные в таблицу. Для этого у меня есть функция для управления дублированными членами.Проверка дубликатов записей в PL/SQL

Работает, однако есть еще одна проблема. Если другая вставка с такими же данными выдается до завершения моей первой транзакции, транзакция будет успешной. Таким образом, у меня есть две записи базы данных с одинаковыми данными элемента.

Как я могу написать свою функцию проверки и предотвратить такую ​​же элемент должен быть записан в базе данных

+0

Я не уверен, есть ли слово под названием 'Doublicated';) –

+0

Checkıng Double Member? – programmer

+0

Вы имеете в виду дубликаты? Вы хотите удалить дубликаты и избежать их в будущем? –

ответ

1

насчет создания уникального ограничения?

+0

. Да, это может быть solutıon, но ıt conflıg wıth another ıssues, я предлагаю thus solutıon, но мой член команды не принимает ıt: :)), и я стараюсь другой способ – programmer

+0

Если он не согласен, у него, вероятно, есть лучшее решение для бизнес-класса :) он может делиться – clq

+0

как насчет использования mutex ın oracle – programmer

0

Единственное правильное решение - создать уникальное ограничение в таблице MEMBER, выбрав один бизнес-ключ.

Уникальные ограничения действуют на внутреннем уровне базы данных и поэтому работают лучше, чем любой код, который мы пишем сами. Ручные проверки просто не будут масштабироваться одинаково. Кроме того, гарантируется гарантирование уникальности в многопользовательских средах.

Принимая во внимание, что, как вы обнаружили, код, который мы пишем сами, это не так. Это связано с тем, что согласованность чтения Oracle означает, что незафиксированные изменения в сеансе 1 невидимы для сеанса 2; поэтому независимо от того, что делает сеанс проверки 2, он будет вставлять дубликатную запись, потому что ее версия является единственной версией, которую она может видеть.

Кроме того, легко избежать использования нашего собственного кода, написав одноразовые вставные операторы или путем написания операторов обновления. Мы не можем избежать уникальных ограничений: мы можем отбросить или отключить их, но это разумное решение.

Короче говоря, базы данных, которые полагаются на код приложения для обеспечения уникальности или целостности отношения неизбежно в конечном итоге с повреждением данных.

Смежные вопросы