Newsgroup: it.comp.software.database
Titolo: Come fare un 'generatore' su MySql ???

Vorrei in qualche modo replicare la funzionalita' dei generatori di Firebird 
su MySql.
In pratica vorrei avere un valore, mantenuto nel db, che sia possibile 
leggere e ad ogni lettura viene automaticamente incrementato.
Un po quello che fanno i campi autoincrementanti, solo che nel mio caso un 
unico generatore deve essere utilizzato per creare le chiavi principali di 
ogni tabella presente sul db.
Come fare con MySql ?
Ciao e grazie
RobertoA

 Firebird su MySql.
Da quello che ho capito, MySQL permette l'utilizzo di sequenze solo se
associate a colonne di tabella
Enrico
P.S. tieni comunque presente che io non uso MySQL...

 associate a colonne di tabella
Si, conosco la possibilita di usare dei campi Autoincrementantoi come quelli 
di Access, solo che volevo, per compatibilita' con un altro db, gestire la 
cosa esattamente come con l'altro db e quindi avere un unico generatore di 
numeri univoci da usare per assegnare il campo chiave principale di ogni 
tabella.
Grazie e ciao
RobertoA

 chiave principale di ogni tabella.
Puoi provare se funziona il comando CREATE SEQUENCE, ma l'unico
riferimento che ho trovato a tale comando e' stato per MaxDB (o SapDB,
non capisco perche' non fanno una fusione dei due prodotti...). In
alternativa puoi costruirti da te una o due funzioni che creano una
sequenza e la incrementano (piu' o meno e' il funzionamento di
PostgreSQL: per incrementare una sequenza devi utilizzare una
funzione). Infine, come ultima alternativa, visto che ne hai le
conoscenze e la possibilita', puoi buttare MySQL nell'unico posto che
si merita: nell'immondezzaio :)
Enrico

 funzione). 
Almeno leggendo la documentazione di PostgreSQL non è una cosa banale.
La sequenza deve essere mantenuta coerente in tutte le transazioni e non
so se con delle semplici funzioni sia possibile.
Magari qualcosa tipo (pseudo codice)?:
def create(name):
  CREATE TABLE name (n INTEGER AUTOINCREMENT );
def nextvalue(name):
  INSERT INTO name VALUES (DEFAULT);
  return SELECT lastinsertedid FROM name;
def currvalue(name):
  return SELECT lastinsertedid FROM name;
Saluti  Manlio Perillo

   INSERT INTO name VALUES (DEFAULT);
meglio UPDATE name SET n = DEFAULT;


 Magari qualcosa tipo (pseudo codice)?:
Beh, personalmente pensavo una tabella con tre colonne (nome sequenza,
nuovo valore, vecchio valore)
Enrico


E' la soluzione più ragionevole; avevo pensato dopo ad usare UPDATE. ;-)
Comunque mi sono letto i sorgenti per la gestione delle sequenze in
PostgreSQL è c'è un bel pò di roba...
Saluti  Manlio Perillo

   return SELECT lastinsertedid FROM name;
A parte che quest'ultima riga non funzionerebbe in nessun caso, ma ho
idea che questo approccio possa portare a inconsistenze.
Insisto, le sequenze in altri database sono oggetti a sè stanti per un
motivo.
Bye
-- 
Rudy
http://hillrudy.blogspot.com/
e-mail a 
email.it

 si merita: nell'immondezzaio :)
40 minuti di applausi :-)
Scherzi a parte, mysql ha le sue giuste collocazioni, vantaggi e svantaggi.
Bye
-- 
Rudy
http://rdbland.blogspot.com/
e-mail a 
email.it

 
Di solito si dovrebbe usare una tale funzione subito dopo un insert.
Tempo fa mi sono ritrovato a fare proprio così, ma è una cosa che ho
imparato ad odiare ;-).
Purtroppo anche usare chiavi "naturali" porta ai suoi problemi...
Io ad esempio mi sto ritrovando con delle primary key su 3 colonne di
tipo testo.
Saluti  Manlio Perillo

 svantaggi.
Personalmente, l'unica collocazione che gli trovo e' in quei ambiti in
cui le transazioni non servono. Per il resto, vi sono molti sistemi
piu' affermati e completi (PostgreSQL e' uno di questi)
Enrico

 PostgreSQL è c'è un bel pò di roba...
E' normale, la gestione delle sequenze e' sicuramente piu' complessa
rispetto alla versione semplicistica da me proposta. C'e' da dire pero'
che in MySQL, avendo a disposizione le tabelle MyISAM, il discorso si
semplifica di brutto, visto che tali tabelle non hanno transazioni (e,
da come ho assimilato io il concetto, le sequenze non devono essere
gestite in ambito transazionale). Che sia uno dei vantaggi di MySQL?
Enrico