MySQL - no seq

Azért azon meglepődtem, hogy a mysql még mindig nem ismeri a szekvencia fogalmát.
Tudtommal pedig az SQL92 (!) szabvány: http://www.ocelot.ca/commands.htm#CREATE

Hozzászólások

Ez azert eleg konnyen workaroundolhato egy segedtablaval meg egy megfelelo tarolt eljarassal. Az a mondas, hogyha bonyolultabb funkcionalitast akarsz, akkor ugyis valami sajatot irsz, ha meg egyszerut, akkor pedig ott van az auto_increment (egyebkent ertem, hogy miert nem jo valakinek az auto_increment).

Pl:



create table sequences (
  name varchar(50),
  value integer 
); 



create function seq_nextval( p_name varchar(50) )
returns integer
modifies sql data
begin 

	declare retval integer;
	declare lock_flag integer;

	select get_lock( concat('USER_SEQ',  p_name), 10 )
	into lock_flag;
	
	if lock_flag = 1 then

		update sequences
		set value = value + 1
		where name = p_name;
	
		select value
		into retval
		from sequences
		where name = p_name;

	else

		set retval = null;

	end if;	
	
	select release_lock( concat('USER_SEQ',  p_name) )
	into lock_flag;
	
	return retval;

end;

Szerintem azért, mert a szekvenciát leggyakrabban arra használják, hogy legyen egy egyedi azonosító a táblán belül. Arra meg ott van az auto_increment a mysqlben. Gondolom az auto_increment egyerűbb/gyorsabb, mint egy többet "tudó" szekvencia. Emiatt valószinüleg nem olyan fontos a hiánya. Persze ettől még implementálhatnák...

Nezd, ahol nem elég az autoincrement, ott ugyis valami sajat azonositogeneralas folyik. Sztem annak lenne ertelme, hogy egy UNIQUE indexes oszlop kaphasson egy fuggvenytol default erteket - de ezt query oldalon is meg lehet oldani.
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.