transazioni

mysql_query("BEGIN");

varie query inserimento e aggiornamento
.....
........
.........

{mysql_query("COMMIT");}

se provo a fare due inserimenti da due computer differenti,però uno fa l'inserimento

un'attimo prima, con il COMMIT dovrebbe distruggere tutte le sessioni aperte,e nel mio caso

l'inserimento del secondo non lo dovrebbe fare,invece lo fa e come

inviato 9 anni fa
leoneweb
X 0 X

con il COMMIT dovrebbe distruggere tutte le sessioni aperte,e nel mio caso

l'inserimento del secondo non lo dovrebbe fare

Non è così che funzionano le transazioni, non fanno quello che pensi.  :dunno:

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

allora non ho capito niente.

Me le potresti spiegare?

risposto 9 anni fa
leoneweb
X 0 X

quindi se io faccio

mysql_query("BEGIN");

varie query inserimento e aggiornamento
.............
.........
.........
if (mysql_query($insertSQL,$database)) 
{mysql_query("COMMIT");} else {mysql_query("ROLLBACK");}
risposto 9 anni fa
leoneweb
X 0 X

 ::)

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

 O0,e ti ringrazio.

Vorrei approfittare della tua pazienza e della tua conoscenza che mi sembra vasta in materia.

Ritorniamo un'attimo al metodo lock per quanto riguarda le prenotazioni,ti spiego quello che mi succede.

Pagina1

Ho un form dove metto data arrivo e data partenza (Invio)

Accedo alla pagina 2

Mi restituisce il numero delle camere disponibili in quel periodo.

Supponiamo che mi restituisce la n°1-3-4,clikko sul numero 2

(fino a qui non ho fatto nessuna query aggiornamento o inserimento)

accedo alla 3 pagina

Dove inserisco il cognome e scelgo il tipo di soggiorno. (Invio) (Qui mi fa il controllo se il cognome risulta gia in database e se no va ad inserire il cognome nella tabella clienti)

Accedo alla pagina 4

Qui inserisco tutti gli altri dati nome-data nascita etc...(Invio)

Accedo alla pagina 5 ed Ultima  :)

Dove mi visualizza il resoconto di tutta la prenotazione e appena premo il pulsante

mi va ad inserire i rimenenti dati anagrafici del cliente nella tabella clienti e la prenotazione nella tabella prenota.

Durante questi passagi vado ad interagire(solo a leggere i dati) con altre tabelle(tariffe-periodi-note).

All'inizo della pagina 2 ho messo un lock tables e ho fatto in questo modo:

mysql_query("LOCK TABLES camere READ, prenota WRITE");

però quando passo alla pagina 3 mi dice che

Table 'Tariffe' is not locked with LOCK TABLES

ma devo bloccare tutte le tabelle? nella pagina dove mi da il risultato lavoro solo con le

tabella camere e prenota

 :bye:

risposto 9 anni fa
leoneweb
X 0 X

Come per le transazioni, anche i Lock vengono persi al termine dell'esecuzione di uno script PHP (quindi al termine della generazione di ogni singola pagina) poiché la connessione al DB viene automaticamente chiusa. Non c'è modo di evitarlo.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X

quindi ad ogni pagina che mi interessano (dalla 1 alla 5) dovrei mettere

LOCK TABLES

risposto 9 anni fa
leoneweb
X 0 X

però a me il lock table funziona dalla 1° all'ultima pagina e viene rilasciato proprio quando faccio

if(mysql_query($insertSQL, $database)) {("UNLOCK TABLES");}

e non ad ogni fine script (ogni pagina) però il mio problema è quello che devo bloccare tutte le tabelle comprese quelle sulle quali vado solo a leggere

risposto 9 anni fa
leoneweb
X 0 X

ne sei realmente sicuro? Hai potuto verificarlo direttamente? Leggi qui:

http://dev.mysql.com/doc/refman/5.0/en/lock-tables.html

All tables that are locked by the current thread are implicitly unlocked when the thread issues another LOCK TABLES, or when the connection to the server is closed

Al termine dell'esecuzione di uno script la connessione a MySQL viene automaticamente chiusa, quindi anche i LOCK vengono rilasciati.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
modificato 9 anni fa
X 0 X

Una volta bloccate le tabelle

c'è un modo x accedrvi lo stesso?

Se io amministratore voglio leggere alcuni dati xro'sono state bloccate

in precedenza da un'altro utente

Leggendo il manuale mi sembrava che dovevo utilizzare

"SELECT HIGH_PRIORITY * FROM database";

oppurre ho letto male?

risposto 9 anni fa
leoneweb
X 0 X

Non mi risulta che per i lock esistano utenti (amministratori, utenti semplici) con "poteri" differenti.

 :bye:

P.S.: ho corretto il link che ti ho postato prima.

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda