|
|
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
Пару, м. б., тупых вопросов: 1. Как в Sybase организовано рождение unique id? 4 example, в InterBase для этого ЭстЪ GENERATOR'ы. Если аналогичный механизм ЭстЪ - то как получить значение этого unique id? 4 example, в IB SELECT GEN_ID(NEWCLIENT, 1) FROM RDB$DATABASE 2. Как можно однозначно идентифицировать запись в таблице, не имеющей ;) PK(UK)? 4 example, (пример тупой и не показательный): ЭстЪ таблица с двумя записями: Код: plaintext 1. 2. 3. Код: plaintext 1. Опять же, в InterBase ЭстЪ RDB$DB_KEY (подробности на ibase.ru) Код: plaintext 1. 3. Поясните на пальцах назначение и использование поля timestamp, pls... Краем уха слыхал и понял, что оно идентифицирует номер версии данных записи (а-ля autoincrement) и при каждом update увеличивается... А как оно живет в контексте транзакций и их видов (SNAPSHOT, SNAPSHOT TABLE STABILITY, READ COMMITTED)? P. S. Сильно не пинайте - доку по мере возможности и наличии времени читаю... Но, IMHO, лучше спросить - быстрее и понятнее-доступнее будет... FAQ'и смотреть - dial-up :( _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 02:09 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
I'm so sorry :( - забыл добавить: ASE 12.5 _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 02:18 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
Ex_Soft 2. Как можно однозначно идентифицировать запись в таблице, не имеющей ;) PK(UK)? 4 example, (пример тупой и не показательный): ЭстЪ таблица с двумя записями: Да никак. Причем не только в ASE - в любой СУБД. Правда, если сделать set rowcount 1 update table_name set BirthDate='13.02.1941' where FIO='Иванов Иван Иванович' and BirthDate='13.02.1913' set rowcount 0 то измениться только одна запись Но это несильно лечит - надо всегда иметь нормальный PK. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 09:58 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
Ex_Soft 3. Поясните на пальцах назначение и использование поля timestamp, pls... Это бинарное поле, которое может быть только одно на таблицу, и если оно есть, то оно автоматически изменяется каждый раз в строке при изменении этой строки (при этом не учитывается, изменились ли реально данные строки или нет). Единственная допустимая операция над полем - сравнение на равенство или неравенство (= или <>). Заметьте, что ко времени этот тип данных не имеет никакого отношения и приводить его к типу datetime не имеет никакого смысла. Применяется timestamp для реализации в приложении т.н. "оптимистической блокировки" по timestamp. Клиентское приложение читает данные, дает их изменять пользователю (кроме поля timestamp) и потом при сохранении данных выполняет запрос вида Код: plaintext 1. 2. 3. 4. 5. Если считанную и измененную запись к моменту сохранения успеет изменить другой пользователь, то пользователю будет выдано соотв. сообщение (тут конечно возможна более сложная логика обработки такого конфликта). Ex_Soft Краем уха слыхал и понял, что оно идентифицирует номер версии данных записи (а-ля autoincrement) и при каждом update увеличивается... Неверно. timestamp не увеличиваестся, а просто изменяется. Он может измениться и "вниз", хотя для timestamp нет понятия "больше" или "меньше". Гарантируется только, что на достаточно большом периоде up-time-а сервера timestamp не будет неизменным при изменении данных. Ex_Soft А как оно живет в контексте транзакций и их видов (SNAPSHOT, SNAPSHOT TABLE STABILITY, READ COMMITTED)? А никак. С изоляцией транзакций он не связан, просто тупо себе изменяется. Если интересно, я могу рассказать, как timestamp реализован внутри, хотя это может быть даже вредно для его правильного использования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 10:21 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
автор 1. Как в Sybase организовано рождение unique id? 4 example, в InterBase для этого ЭстЪ GENERATOR'ы. Если аналогичный механизм ЭстЪ - то как получить значение этого unique id? Какие ID имеются в виду ? IDENTITY или newid() Если newid() то его использовать можно точно так же, как INTERBASE-овские sequence. - select newid() - и готов новый идентификатор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 10:42 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
MasterZiv Ex_Soft А как оно живет в контексте транзакций и их видов (SNAPSHOT, SNAPSHOT TABLE STABILITY, READ COMMITTED)? А никак. С изоляцией транзакций он не связан, просто тупо себе изменяется. Если интересно, я могу рассказать, как timestamp реализован внутри, хотя это может быть даже вредно для его правильного использования. Расскажите пожалуйста. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 10:50 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
Ну там достаточно тупо все. Внутри сервера есть таймер, что-то типа GetTickCount() в WIN32 (возможно на Win32 оно так и реализовано). Он, кстати, доступен через глобальную переменную @@dbts. При любом создании/изменении/удалении записи этот счетчик преобразуется в бинарку (а может быть он уже и есть в бинарке) и пишется в запись. Возможно, это не напрямую время (и скорее всего так), а как-то еще завязано на последовательность транзакций, поскольку сервер использует этот же счетчик для идентификации транзакций в логе, так что он должен быть уникальным для двух "одновременно" произощедших транзакций. Поэтому он при долгой работе сервера теоретически может и переполниться и "упасть вниз". Ну и сразу становиться понятно происхождение самого названия timestamp. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2005, 11:26 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
MasterZivselect newid() - и готов новый идентификатор. это дословно? ;) а то перерыл всю имеющуюся доку нЭт там newid(). Я так понимаю там хоть какой-то параметр д.б. идентифицирующий, 4 exanple, таблицу... Или это один на всех какой-то глобальный уникальный идентификатор? _________________ "Helo, word!" - 17 errors 56 warnings ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 08:01 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
newid() newid Description Generates human-readable, globally unique IDs (GUIDs) in two different formats, based on arguments you provide. The length of the human-readable format of the GUID value is either 32 bytes (with no dashes) or 36 bytes (with dashes). Syntax newid([optionflag]) Parameters option flag 0, or no value - the GUID generated is human-readable, but does not include dashes. This argument, which is the default, is useful for converting values into varbinary. -1 - the GUID generated is human-readable and includes dashes. -0x0 - returns the GUID as a varbinary. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 10:25 |
|
||
|
Ликбез по SB
|
|||
|---|---|---|---|
|
#18+
Там еще опечатка в доке - минусы перед 1 и 0x0 лишние. В общем, возможные варианты и результат такие : Код: plaintext 1. 2. 3. Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2005, 10:33 |
|
||
|
|

start [/forum/topic.php?fid=55&msg=32886065&tid=2013933]: |
0ms |
get settings: |
11ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
69ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
50ms |
get tp. blocked users: |
1ms |
| others: | 234ms |
| total: | 402ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...