Transazione per accesso concorrente a una tabella

luke1979

Nuovo Utente
24 Apr 2015
3
0
0
Ciao a tutti, ho un problema che non riesco a risolvere. Ho letto sul manuale di mysql ma non ne vengo a capo:

il problema è questo,
i clienti possono inviare delle richieste di prenotazione alle attività commerciali,
l'attività commerciale periodicamente verifica se ci sono delle nuove richieste di prenotazione e se le trova per ognuna di esse dovrà accettare o rifiutare la prenotazione.

Ho una tabella prenotazioni con i seguenti campi:
id (chiave primaria della tabella)
idCliente
idAttivita
stato (accettata, rifiutata o null)
sospesa (true o false)
testo (testo che il cliente scrive quando fa una prenotazione)

Ipotizzando di avere più postazioni all'interno dell'attività che contemporaneamente visualizzano le nuove richieste di prenotazione e decidono se accettarle, rifiutarle o non fare nulla, vorrei che se una richiesta è già visualizzata sul display di un addetto non venga visualizzata anche su quello di un altro.
Ho pensato di usare una trasazione tipo questa nella classe java che fa il check se ci sono nuove richieste:

1) inizio transazione
2) leggo dalla tabella prenotazioni quelle dove idAttività è quello dell'attività interessata e dove sospesa = false e dove stato = null
3) faccio un update per rendere sospesa = true sugli stessi record della select sopra al punto 2
4) fine transazione

quando la classe rifà la verifica per un altro addetto dell'attività selezionerà solo quelle dove sospesa = false come dal punto 2 e quindi non rivisualizza quelle che sono visualizzate su un altro schermo di un altro addetto. Quando l'addetto accetta o rifiuta o non fa nulla riguardo ad una prenotazione e passa alla successiva visualizzata sul suo display il campo sospesa viene posto = false così che un altro addetto alla prossima verifica periodica può vedere la richiesta nel caso in cui non sia ancora stata accettata o rifiutata.

Mi domando? Il punto 2 può essere eseguito in contemporanea prima che avvenga il punto 3 dell'update da più addetti qudini più addetti visualizzeranno le stesse richieste, allora ho pensato che potrei usare nel punto 2 una SELECT ... LOCK IN SHARE MODE oppure una SELECT .. FOR UPDATE, ma non riesco bene a capire dal manuale come funzionano.
La lock in share mode aspetta che sia finita ogni altra operazione in altre transazioni sui record della select prima di eseguirla... ma mi domando se due select lock in share mode vengono eseguite insieme prima che parta un'update del punto 3 anch'esse leggeranno le stesse richieste e non va bene.
La select for update invece forse potrebbe andare bene perchè oltre a mettere un blocco di scrittura da parte delle altre richieste sui record ne impedisce anche la scrittura? Alcuni manuali dicono così, altri il contrario quidni non lo riesco a capire.

Altrimenti potrei evitare di usare le transazioni e far visualizzare anche le stesse richieste e quando un addetto prende una decisione di accettare o rifiutare, se lo stato è già diverso da null non prendo in considerazione la sua decisione perchè la richiesta è già stata evasa da un altro addetto. Però questa soluzione porterebbe ad una gran perdita di tempo per tutti gli addetti che ogni qualvolta devono accettare o rifiutare la prenotazione devono andare a controllare la disponibilità nella lista degli appuntamenti ed è appunto tempo sprecato che se un addetto ha già evaso una richiesta anche tutti gli altri che magari sono centinaia di addetti debbano andare inutilmente a controllare la lista appuntamenti per prendere una decisione che poi non srevirà a nulla perchè la richiesta è già stata evasa.

Ringrazio tantissimo chi mi può aiutare perchè non riesco ad uscirne...
 
Discussioni simili
Autore Titolo Forum Risposte Data
G Transazione immagini Javascript 1
P Aiuto per rendere un Bot Telegram Privato PHP 0
V Query per una somma PHP 2
A Tabella con bottoni per aggiornamento record PHP 6
G Consigli SEO per scrittura e struttura pagine SEO e Posizionamento 5
P Passare solo alcuni parametri a script per CSV PHP 0
A Consiglio per creazione sito web Content Management System (CMS) 0
A Regex per isolare link interni con rel noopener PHP 0
L form immagini per il database PHP 0
S CREAZIONE DI SITO PER CORSI DI FORMAZIONE WordPress 1
I [cerchiamo][retribuito] Grafico/a per stickers Offerte e Richieste di Lavoro e/o Collaborazione 0
R Cercarsi programmatore per GDR PBC Offerte e Richieste di Lavoro e/o Collaborazione 0
L Sessione e array per utenti PHP 0
A Sottoquery con group by per mese MySQL 0
G Appicazione HTML per inserimento dai in Database Access Microsoft HTML e CSS 0
V [Cerco] Socio e Sviluppatore per App PlacesFinder Offerte e Richieste di Lavoro e/o Collaborazione 0
Tuttoinformatico [Cerco] Cerco Staff per Blog Professionale dedicato alla Tecnologia! Offerte e Richieste di Lavoro e/o Collaborazione 0
M user agent per il download di api PHP 0
B Stringa sql per ricerca su più campi Database 1
Cosina Upload multiplo con invio allegati per email PHP 0
P Editor per la realizzazione di siti HTML e CSS 0
M Versione nativa per M1. Photoshop 1
A Aiuto per pagina php PHP 0
M [Cerco] aiutanti per creare sito Offerte e Richieste di Lavoro e/o Collaborazione 4
T [cerco] scrittore/scrittrice per articoli web Offerte e Richieste di Lavoro e/o Collaborazione 5
L Interfaccia grafica per gestire sql server .NET Framework 1
B javascript per problemi con pdf e Safari Javascript 0
R Plugin per Gestire videocorsi a pagamento WordPress 3
Y Vorrei selezionare un colore di sfondo per una pagina web Javascript 0
C media per riga MySQL 1
I Cerca: blogger IT per articoli di prova Offerte e Richieste di Lavoro e/o Collaborazione 0
R Plugin per Registrazione Utente e Pagamento prodotto WordPress 2
M Quando ha l'immagine ingrandita è possibile fare rotazione per ritagliare? Photoshop 0
D modificare questo codice per inserimento in text e non in tabella jQuery 1
U [Cerco ] incremento traffico per il mio sito Vendere e Acquistare pubblicita' online 0
E Monitor per Photoshop Photoshop 0
S Libreria PHP per creare file dwg o dxf PHP 0
T cercasi aiuto per file d1 (open-edge db) Database 0
A [cerco - retribuito] Sviluppatore Php freelance per progetti vari Offerte e Richieste di Lavoro e/o Collaborazione 2
G un tool che trova nuovi clienti per web agency e web developer Offerte e Richieste di Lavoro e/o Collaborazione 2
A Mostrare dati database per pagine PHP 2
R cammino minimo per lista di picking: nodi "imposti" da visitare Programmazione 1
A [Vendo] Articoli per blog e siti ecommerce in ottica seo Offerte e Richieste di Lavoro e/o Collaborazione 0
N Mysql_result per PHP 7 PHP 2
elpirata Query per leggere dati da una tabella mysql e mostrarli a video in base a parametri passati tramite GET PHP 5
E Cambiare lingua in Elements per Mac Mac e Software 2
S WEB APP PER AUTOMATIZZARE TASK INSTAGRAM Annunci servizi di Social Media Marketing 0
G Nuova Idea su come trovare clienti per sviluppo web Discussioni Varie 6
L Aiuto per programma web php/mySQL PHP 2
F INDESIGN: problema esportazione esecutivo per la stampa con foto B/N Webdesign e Grafica 0

Discussioni simili