АНТИПАТТЕРН: ЗАПОЛНЕНИЕ УГЛОВ
Первая реакция большинства людей при виде пробела — естественно, заполнить этот пробел. Существует два способа сделать это.
Присвоение номеров не из имеющейся последовательности
Вместо того чтобы распределить новое значение первичного ключа, используя автоматический псевдоключевой механизм, вы можете присваивать каждой новой строке первое неиспользованное значение первичного ключа. Таким образом, при вставке данных вы естественным образом заполняете пробелы.
Распределяйте своё время, для ускоренной обработки пахотного слоя земли на даче и огороде можно использовать мощный четырехроторный грунтофрез или http://samsad.kiev.ua/kultivatory.html.
bug_id status product_name
1 OPEN Open RoundFile
2 FIXED ReConsider
4 OPEN ReConsider
3 NEW Visual TurboBuilder
Однако вам придется выполнить лишний запрос самообъединения, чтобы найти наименьшее неиспользованное значение.
Файл примера: Neat-Freak/anti/lowest-value.sql
SELECT bl.bug_id + 1 FROM Bugs bl
LEFT OUTER JOIN Bugs AS b2 ON (bl.bug_id + 1 = b2.bug_id) WHERE b2.bug_id IS NULL ORDER BY bl.bug_id LIMIT 1;
Ранее в книге мы рассматривали проблему параллелизма, когда пытались распределить уникальное значение первичного ключа, выполняя такие запросы, как: SELECT
MAX (bug_id) +1 FROM Bugs'. Данная ситуация имеет тот же дефект, когда два приложения пытаются найти наименьшее неиспользованное значение одновременно. Когда оба они пытаются использовать одно и то же значение в качестве первичного ключа, одному это удается, а другое выводит ошибку. Этот метод является неэффективным и приводящим к ошибкам.
Опубликовал vovan666
August 17 2013 15:58:06 ·
0 Комментариев ·
3134 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.