Salve ragazzi
ho bisogno di capire alcune cose sulle stored procedure, un argomento che ho letto sommariamente ma mai approfondito perchè pensavo che la programmazione lato server DB non sarebbe mai stata necessaria, almeno per me, ma credo che in alcuni casi possa venire in aiuto.
Sempre che poi si possa fare.
Ho un programma che non si può modificare e che si appoggia ad un server mysql, la concorrenza è multiplia e alcuni problemi sono legati al fatto che non si è osservata un'accurata gestione degli accessi.
Fondamentalmente vorrei che ogni volta che s'invia un INSERT o un UPDATE su determinate tabelle, tramite le stored procedure si dovrà eseguire prima una LOCK TABLES <table_name> WRITE, dopo eseguire la query vera e propria che arriva dal programma e per ultimo UNLOCK TABLES.
Dovrebbe essere una cosa così ma sono veramente incerto perchè mai usate queste procedure e mi sono aiutato da web:
dove dice 'table_name' ci dovrebbe essere il nome della tabella su cui è diretta la query ma io non posso
saperlo, so solo che vorrei che intervenisse questa procedura solo se dirette a tre di tutte le tabelle presenti
nel DB.
Non so se sono stato chiaro ma meglio di così mi riesce difficile spiegarlo.
Grazie a tutti per i consigli
ho bisogno di capire alcune cose sulle stored procedure, un argomento che ho letto sommariamente ma mai approfondito perchè pensavo che la programmazione lato server DB non sarebbe mai stata necessaria, almeno per me, ma credo che in alcuni casi possa venire in aiuto.
Sempre che poi si possa fare.
Ho un programma che non si può modificare e che si appoggia ad un server mysql, la concorrenza è multiplia e alcuni problemi sono legati al fatto che non si è osservata un'accurata gestione degli accessi.
Fondamentalmente vorrei che ogni volta che s'invia un INSERT o un UPDATE su determinate tabelle, tramite le stored procedure si dovrà eseguire prima una LOCK TABLES <table_name> WRITE, dopo eseguire la query vera e propria che arriva dal programma e per ultimo UNLOCK TABLES.
Dovrebbe essere una cosa così ma sono veramente incerto perchè mai usate queste procedure e mi sono aiutato da web:
Esempio:
DELIMITER //
CREATE PROCEDURE ....NOME PROCEDURA??
BEGIN
-- lock tables
SET @sql := CONCAT('LOCK TABLES ', table_name, ' WRITE');
PREPARE stmt FROM @sql;
EXECUTE stmt;
-- esegui insert o update
QUI DOVREBBE PRENDERSI LA QUERY ARRIVATA..... cosa metto?? (@sql)
-- unlock tables
UNLOCK TABLES;
END//
DELIMITER ;
dove dice 'table_name' ci dovrebbe essere il nome della tabella su cui è diretta la query ma io non posso
saperlo, so solo che vorrei che intervenisse questa procedura solo se dirette a tre di tutte le tabelle presenti
nel DB.
Non so se sono stato chiaro ma meglio di così mi riesce difficile spiegarlo.
Grazie a tutti per i consigli