Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Формирование уникального идентификатора / 25 сообщений из 33, страница 1 из 2
14.01.2014, 18:03:07
    #38526025
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Прошу прощения за, возможно, глупый вопрос!

Со специфическими тонкостями Firebird`а не знаком (с ней не приходилось работать), поэтому, возможно, что то ускользнуло от меня.
В одной из FB-баз встретил в BI-триггерах код генерации уникального идентификатора записи, который любят использовать многие новички в SQL:
Код: sql
1.
SELECT MAX(id) FROM Table INTO :newId

Естественно, никаких блокировок БД/таблицы не производится.
Вот и стало интересно - это корректный код для Firebird`а, или его писал как раз новичек, не задумавшись о последствиях при многочисленных сетевых запросах?

Спасибо!
...
Рейтинг: 0 / 0
14.01.2014, 18:08:38
    #38526036
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROAэто корректный код для Firebird`а, или его писал как раз новичек, не
задумавшись о последствиях при многочисленных сетевых запросах?
Если это действительно генерация уникального идентификатора, то - нет, этот дебилизм
действительно работает только в монопольном режиме.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.01.2014, 18:08:41
    #38526037
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Hello, OlegROA!
You wrote on 14 января 2014 г. 18:06:49:

OlegROA> Вот и стало интересно - это корректный код для Firebird`а,
> или его писал как раз новичек
примерно в 99,99% случаев это написано школьником.


Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.01.2014, 18:09:12
    #38526039
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROA,

А с какой СУБД работать приходилось?
Потому что никакой специфики тут нет, один г**код. Который, как верно подмечено, приведёт к коллапсу уже на 1.5 пользователях.
...
Рейтинг: 0 / 0
14.01.2014, 18:09:15
    #38526040
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROAПрошу прощения за, возможно, глупый вопрос!

Со специфическими тонкостями Firebird`а не знаком (с ней не приходилось работать), поэтому, возможно, что то ускользнуло от меня.
В одной из FB-баз встретил в BI-триггерах код генерации уникального идентификатора записи, который любят использовать многие новички в SQL:
Код: sql
1.
SELECT MAX(id) FROM Table INTO :newId

Естественно, никаких блокировок БД/таблицы не производится.
Вот и стало интересно - это корректный код для Firebird`а, или его писал как раз новичек, не задумавшись о последствиях при многочисленных сетевых запросах?

Спасибо!
Ну раз FB его пропустил то значит корректный, но писали не задумавшись
...
Рейтинг: 0 / 0
14.01.2014, 18:10:47
    #38526045
WildSery
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
m7m,

Код: sql
1.
select * from rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, ...


тоже корректный, с точки зрения синтаксиса.
...
Рейтинг: 0 / 0
14.01.2014, 18:39:54
    #38526095
Kotъ-Begemotъ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Мимопроходящийпримерно в 99,99% случаев это написано школьником.


Из ДЮСШОР по боксу
...
Рейтинг: 0 / 0
14.01.2014, 18:41:16
    #38526100
Kotъ-Begemotъ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
WildSerym7m,

Код: sql
1.
select * from rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, rdb$relations, ...


тоже корректный, с точки зрения синтаксиса.

А уж к DROP DATABASE и вообще с точки зрения синтаксиса не придраться! ;-)
...
Рейтинг: 0 / 0
14.01.2014, 18:50:52
    #38526114
m7m
m7m
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
WildSery, Kotъ-Begemotъ

Да ладно вам
каков был вопрос, таков был и ответ
...
Рейтинг: 0 / 0
14.01.2014, 19:03:23
    #38526122
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
WildSeryOlegROA,

А с какой СУБД работать приходилось?
Потому что никакой специфики тут нет, один г**код. Который, как верно подмечено, приведёт к коллапсу уже на 1.5 пользователях.Много лет работал (и работаю) с десктопными СУБД, а из SQL - несколько лет с MSSQL и MySQL.
Понимаю, конечно, что для любого разработчика более-менее разбирающегося в SQL, вышеприведенный мною код - мягко говоря, некорректен.
Но, к примеру, в FB есть системные генераторы уникального идентификатора, которых нет в mssql и mysql.
Поэтому и подумал - может и BI-триггеры в Firebird имеют какую-либо специфику (типа неявной блокировки таблицы на время его выполнения)?
...
Рейтинг: 0 / 0
14.01.2014, 19:09:29
    #38526131
wadman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROA, триггеры отрабатывают в контексте транзакции. Никаких блокировок.
...
Рейтинг: 0 / 0
14.01.2014, 19:10:51
    #38526134
PEAKTOP
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROAНо, к примеру, в FB есть системные генераторы уникального идентификатора, которых нет в mssql и mysql.
Да щаз! MySQL есть VARIABLES, которые можно и как генераторы приспособить.

OlegROAПоэтому и подумал - может и BI-триггеры в Firebird имеют какую-либо специфику (типа неявной блокировки таблицы на время его выполнения)?

Нет такого. Весь смысл генератора в том, что он транзитивно независим. Поэтому, независимо от уровня изоляции транзакции, он всегда вернет следующее значение.
...
Рейтинг: 0 / 0
14.01.2014, 19:19:33
    #38526140
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Hello, PEAKTOP!
You wrote on 14 января 2014 г. 19:16:57:

PEAKTOP> Весь смысл генератора в том, что он транзитивно
независим.
не нужно кидаться словами смысл которых не до конца понимаешь.
PEAKTOP> Поэтому,независимо от уровня изоляции транзакции, он всегда вернет следующее
> значение.да шо вы такое говорите?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.01.2014, 20:02:54
    #38526184
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROAв FB есть системные генераторы уникального идентификатора, которых нет в
mssql и mysql.
Это какие? Identity, autoincrement и sequences вполне существуют в MS SQL и MySQL, хотя
последние и не очень давно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
14.01.2014, 20:29:02
    #38526210
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROAМного лет работал (и работаю) с десктопными СУБДТам тоже НИКОГДА нельзя полагаться на max(id). Всё делается через вспомогательную таблицу счётчиков, запись которой сначала блокируется, затем увеличивается значение соотв. поля в ней и только после этого зхапись высвобождается, а полученное новое значение возвращается "потребителю".
Если у вас много лет получение нового Id идёт через max(...) и не случалось "странных дубликатов", то... всем бы так везло!
...
Рейтинг: 0 / 0
14.01.2014, 20:42:03
    #38526218
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
код синтаксически корректен, но не более того.

а. можно использовать генераторы.
б. гуиды.
...
Рейтинг: 0 / 0
15.01.2014, 09:20:16
    #38526538
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Dimitry SibiryakovOlegROAв FB есть системные генераторы уникального идентификатора, которых нет в
mssql и mysql.Это какие? Identity, autoincrement и sequences вполне существуют в MS SQL и MySQL, хотя
последние и не очень давно.Классического Firebird генератора уникальных значений sequences, увы, в MySql нет!
Только autoincrement, которого иногда недостаточно.
Можно, конечно, эмулировать его автоинкрементируемым полем в отдельной таблице, но это уже другая тема.
...
Рейтинг: 0 / 0
15.01.2014, 09:29:14
    #38526548
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROA,

Дмитрий имел ввиду sequence который появились в MS SQL 2012. В MySql этого конечно же нет.
...
Рейтинг: 0 / 0
15.01.2014, 09:38:53
    #38526564
OlegROA
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
ТаблоидOlegROAМного лет работал (и работаю) с десктопными СУБДТам тоже НИКОГДА нельзя полагаться на max(id).Можно, можно! Естественно, только в режиме полной блокировки рабочей таблицы. Чего нет, к примеру, в MySql.

ТаблоидЕсли у вас много лет получение нового Id идёт через max(...) и не случалось "странных дубликатов", то... всем бы так везло!Еще раз - такой алгоритм использую только в десктопных базах и только в режиме блокировки таблицы. А в SQL (mssql и mysql) использую, естественно, автоинкрементное поле. Но лично мне иногда в mysql не хватает классического sequences Firebird`а!
...
Рейтинг: 0 / 0
15.01.2014, 09:52:13
    #38526578
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROAТаблоидпропущено...Там тоже НИКОГДА нельзя полагаться на max(id).Можно, можно! Естественно, только в режиме полной блокировки рабочей таблицы.1) Залочивание всей таблицы, даже на короткое время, будет заклинивать ваш "перформанс", юзера непременно будут видеть это - и те, кто пытается её залочить, но должен ждать высвобождения, и те, кто ждут, пока её высвободит тот, кто определяет новый ИДшник.
В dBase-приложениях это проявляется уже на 20...30 юзерах, если они действительно что-то делают
2) вы, конечно же, будете определять max(id) по индексу (не делать же переход на последнюю запись! там ведь может - в результате всяких перетряхиваний таблицы - оказаться далеко не самый последний по значению Id) - ? И что будете делать при сломанном индексе (а это вполне обычная для десктопов вещь) ?
...
Рейтинг: 0 / 0
15.01.2014, 09:56:43
    #38526583
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Рассуждать с т.з. сломанного индекса - это
что-то новое в современной проктологии.
Если БД (в т.ч. индексы в ней) поломаны -
то как получены значения любых столбцов
(в т.ч. PK) уже малоинтересно.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.01.2014, 10:16:09
    #38526605
Таблоид
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Гаджимурадов РустамРассуждать с т.з. сломанного индекса - это что-то новое в современной проктологии.Да тут не проктология, тут хуже: когда в xBase ломаются индексы, то происходит это очень тихо. Никаких сообщений в "логе" (которого вообще нет :)). И только через некоторое время будет вываливаться сообщение 'index corrupted', когда в таблицу уже натолкано энное кол-во некорректных данных (дублей, например).
...
Рейтинг: 0 / 0
15.01.2014, 10:19:32
    #38526610
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
OlegROAМожно, можно!Давайте не будем пропагандировать говнокод и разжигать флуд на этом.
Спасибо за понимание.
...
Рейтинг: 0 / 0
15.01.2014, 10:21:32
    #38526615
Ivan_Pisarevsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Таблоидкогда в xBaseЭто чудо инженерной мысли времен ЦаряГороха кому-то интересно в нашем разделе?
...
Рейтинг: 0 / 0
15.01.2014, 10:31:49
    #38526630
Гаджимурадов Рустам
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Формирование уникального идентификатора
Таблоид> Да тут не проктология, тут хуже

Спрашивается, при чём тут тогда генераторы, PK и т.д.
А если сервак сдохнет - это ж ваще капец что будет...

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Формирование уникального идентификатора / 25 сообщений из 33, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]