rpburry@ncs.dnd.ca (Paul Burry) (03/14/91)
What is the best mechanism for generating unique keys in SYBASE.
Are there any better (faster, more concurrency) methods than:
begin transaction
/** update (and lock) the key control table **/
update control_table
set key = key + 1
where row = 1
/** grab the key value **/
select @key=key
from control_table
where row = 1
commit transaction
/** if the following tranaction is rolled back, then the **/
/** unique key created will be unused... **/
begin transaction
/** use the key **/
insert into the_table
values (@key, ...)
...
commit transaction
forgive the syntax errors. I hope you get the general idea. Presumably
it is better to use a different control table for each table requiring
unique keys (to get around the page locking), and presumably splitting
the key generation and usage will get permit more concurency.
Any suggestions or comments??
--
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
Paul Burry
Voice: (613)-991-7325 Internet: rpburry@ncs.dnd.ca
Fax: (613)-991-7323 UUCP: ..!{uunet,cunews}!ncs.dnd.ca!rpburrydavidm@uunet.UU.NET (David S. Masterson) (03/16/91)
>>>>> On 14 Mar 91 12:31:56 GMT, rpburry@ncs.dnd.ca (Paul Burry) said:
Paul> What is the best mechanism for generating unique keys in SYBASE.
Paul> Are there any better (faster, more concurrency) methods than:
Paul> begin transaction
Paul> /** update (and lock) the key control table **/
Paul> update control_table
Paul> set key = key + 1
Paul> where row = 1
Paul> /** grab the key value **/
Paul> select @key=key
Paul> from control_table
Paul> where row = 1
Paul> commit transaction
Paul> /** if the following tranaction is rolled back, then the **/
Paul> /** unique key created will be unused... **/
Paul> begin transaction
Paul> /** use the key **/
Paul> insert into the_table
Paul> values (@key, ...)
Paul> ...
Paul> commit transaction
I forget how Sybase does this (its been 3 years since I used it), but couldn't
the first transaction be made into an insertion trigger that the second
transaction will trigger?
--
====================================================================
David Masterson Consilium, Inc.
(415) 691-6311 640 Clyde Ct.
uunet!cimshop!davidm Mtn. View, CA 94043
====================================================================
"If someone thinks they know what I said, then I didn't say it!"