MySQL 5 ha introdotto una pletora di nuove funzionalità: le stored procedure sono tra le più significative. In questo tutorial, ci concentreremo su ciò che sono e su come possono semplificarti la vita.
Se lavori spesso con MySQL, ti consigliamo di controllare la gamma di script di codice MySQL e plugin su Envato Market.
? Una routine memorizzata è un insieme di istruzioni SQL che possono essere memorizzate nel server.?
Una stored procedure è un metodo per incapsulare attività ripetitive. Consentono dichiarazioni variabili, controllo del flusso e altre utili tecniche di programmazione.
Il? Accademico? posizione su questo è abbastanza chiaro e supporta l'ampio uso di stored procedure. D'altra parte, quando consideri le opinioni di coloro che lavorano con loro giorno dopo giorno, noterai che le reazioni variano dal supporto completo, incrollabile all'odio totale. Tienilo presente.
ELIMINA
Dichiarazione SQL e cancella i tuoi dati.Lo strumento con cui sto lavorando in questo tutorial, MySQL Query Browser, è piuttosto standard per le interazioni tra database. Lo strumento da riga di comando MySQL è un'altra scelta eccellente. Prendo atto di ciò poiché il popolare phpMyAdmin non supporta l'esecuzione della stored procedure.
Inoltre, userò strutture di tavoli molto rudimentali, strettamente per facilitare la spiegazione. Sto mostrando le stored procedure e sono abbastanza complesse senza preoccuparsi dei tavoli grandi.
Il delimitatore è il carattere o la stringa di caratteri che utilizzerai per dire al client mySQL che hai finito di digitare in un'istruzione SQL. Per anni il delimitatore è sempre stato un punto e virgola. Ciò, tuttavia, causa problemi, perché, in una stored procedure, si possono avere molte istruzioni e ognuna deve terminare con un punto e virgola. In questo tutorial userò? //?
DELIMITER // CREATE PROCEDURE 'p2' () LANGUAGE SQL DETERMINISTIC SQL SECURITY DEFINER COMMENTA 'Una procedura' INIZIA SELEZIONA 'Hello World!'; FINE//
La prima parte dell'istruzione crea la procedura. Le prossime clausole definiscono le caratteristiche opzionali della procedura. Quindi hai il nome e infine il corpo o il codice di routine.
I nomi delle stored procedure non fanno distinzione tra maiuscole e minuscole e non è possibile creare procedure con lo stesso nome. All'interno di un corpo di una procedura, non è possibile inserire istruzioni di manipolazione del database.
Le quattro caratteristiche di una procedura sono:
NON DETERMINISTICO
. INVOKER
è l'utente che chiama la procedura. DEFINER
è il creatore della procedura. Il valore predefinito è DEFINER
. ""
Per chiamare una procedura, è sufficiente inserire la parola CHIAMATA
, seguito dal nome della procedura e quindi dalle parentesi, inclusi tutti i parametri tra loro (variabili o valori). Le parentesi sono obbligatorie.
CALL stored_procedure_name (param1, param2 ,?) CALL procedure1 (10, 'parametro stringa', @parameter_var);
MySQL fornisce un ALTER PROCEDURE
dichiarazione per modificare una routine, ma consente solo la possibilità di modificare alcune caratteristiche. Se è necessario modificare il corpo oi parametri, è necessario eliminare e ricreare la procedura.
PROCEDURA DI CADUTA SE ESISTE p2;
Questo è un comando semplice. Il SE ESISTE
la clausola impedisce un errore nel caso in cui la procedura non esiste.
Esaminiamo come è possibile definire i parametri all'interno di una stored procedure.
CREATE PROCEDURE proc1 ()
: La lista dei parametri è vuotaCREATE PROCEDURE proc1 (IN varname DATA-TYPE)
: Un parametro di input. La parola NEL
è facoltativo perché i parametri sono NEL
(input) per impostazione predefinita.CREATE PROCEDURE proc1 (OUT varname DATA-TYPE)
: Un parametro di uscita.CREATE PROCEDURE proc1 (INOUT varname DATA-TYPE)
: Un parametro che è sia input che output.Naturalmente, puoi definire più parametri definiti con tipi diversi.
DELIMITER // CREATE PROCEDURE 'proc_IN' (IN var1 INT) BEGIN SELECT var1 + 2 AS result; FINE//
DELIMITER // CREATE PROCEDURE 'proc_OUT' (OUT var1 VARCHAR (100)) BEGIN SET var1 = 'Questo è un test'; FINE //
DELIMITER // CREATE PROCEDURE 'proc_INOUT' (OUT var1 INT) INIZIO SET var1 = var1 * 2; FINE //
Il seguente passaggio ti insegnerà come definire le variabili e memorizzare i valori all'interno di una procedura. È necessario dichiararli esplicitamente all'inizio del BEGIN / END
blocco, insieme ai loro tipi di dati. Una volta che hai dichiarato una variabile, puoi usarla ovunque che tu possa usare una variabile di sessione, o letterale, o nome di colonna.
Dichiarare una variabile usando la seguente sintassi:
DECLARE varname DATA-TYPE DEFAULT valore predefinito;
Dichiariamo alcune variabili:
DICHIARARE a, b INT DEFAULT 5; DECLARE str VARCHAR (50); DICHIARICHI oggi il TIMESTAMP DEFAULT CURRENT_DATE; DECLARE v1, v2, v3 TINYINT;
Una volta che le variabili sono state dichiarate, puoi assegnarle i valori usando il IMPOSTATO
o SELEZIONARE
comando:
DELIMITER // CREATE PROCEDURE 'var_proc' (IN paramstr VARCHAR (20)) INIZIA DECLARE a, b INT DEFAULT 5; DECLARE str VARCHAR (50); DICHIARICHI oggi il TIMESTAMP DEFAULT CURRENT_DATE; DECLARE v1, v2, v3 TINYINT; INSERISCI NELLA tabella 1 VALORI (a); SET str = 'I am a string'; SELEZIONA CONCAT (str, paramstr), oggi FROM table2 WHERE b> = 5; FINE //
MySQL supporta il SE, CASE, ITERATE, LASCIARE LOOP, MENTRE
e RIPETERE
costrutti per il controllo del flusso all'interno di programmi memorizzati. Stiamo andando a rivedere come usare SE
, ASTUCCIO
e MENTRE
in particolare, dal momento che sono le dichiarazioni più comunemente usate nelle routine.
SE
dichiarazione Con il SE
dichiarazione, siamo in grado di gestire compiti che coinvolgono le condizioni:
DELIMITER // CREATE PROCEDURE 'proc_IF' (IN param1 INT) BEGIN DECLARE variable1 INT; SET variabile1 = param1 + 1; IF variable1 = 0 THEN SELECT variable1; FINISCI SE; IF param1 = 0 THEN SELECT 'Valore parametro = 0'; ELSE SELECT 'Valore parametro <> 0'; FINISCI SE; FINE //
ASTUCCIO
dichiarazione Il ASTUCCIO
la dichiarazione è un altro modo per verificare le condizioni e prendere la strada appropriata. È un modo eccellente per sostituire più SE
dichiarazioni. La dichiarazione può essere scritta in due modi diversi, offrendo una grande flessibilità per gestire più condizioni.
DELIMITER // CREATE PROCEDURE 'proc_CASE' (IN param1 INT) BEGIN DECLARE variable1 INT; SET variabile1 = param1 + 1; CASE variable1 WHEN 0 THEN INSERT IN table1 VALUES (param1); QUANDO 1 POI INSERISCI NELLA tabella 1 VALORI (variabile1); ELSE INSERISCE NELLA tabella 1 VALORI (99); FINE CASO; FINE //
o:
DELIMITER // CREATE PROCEDURE 'proc_CASE' (IN param1 INT) BEGIN DECLARE variable1 INT; SET variabile1 = param1 + 1; CASE WHEN variable1 = 0 THEN INSERT INTO table1 VALUES (param1); WHEN variable1 = 1 THEN INSERT INTO table1 VALUES (variable1); ELSE INSERISCE NELLA tabella 1 VALORI (99); FINE CASO; FINE //
MENTRE
dichiarazione Ci sono tecnicamente tre circuiti standard: MENTRE
loop, CICLO CONTINUO
cicli, e RIPETERE
loop. Hai anche la possibilità di creare un loop usando il? Darth Vader? di tecniche di programmazione: il VAI A
dichiarazione. Guarda questo esempio di un loop in azione:
DELIMITER // CREATE PROCEDURE 'proc_WHILE' (IN param1 INT) BEGIN DECLARE variabile1, variabile2 INT; SET variabile1 = 0; WHILE variabile1 < param1 DO INSERT INTO table1 VALUES (param1); SELECT COUNT(*) INTO variable2 FROM table1; SET variable1 = variable1 + 1; END WHILE; END //
Cursore
viene utilizzato per scorrere una serie di righe restituite da una query ed elaborare ogni riga.
MySQL supporta cursore
nelle stored procedure. Ecco un riassunto della sintassi essenziale per creare e utilizzare un cursore.
DICHIARARE il nome del cursore CURSOR FOR SELECT? ; / * Dichiara e popola il cursore con un'istruzione SELECT * / DECLARE CONTINUA HANDLER FOR NOT FOUND / * Specifica cosa fare quando non vengono trovati altri record * / OPEN nome-cursore; / * Cursore aperto per l'uso * / FETCH nome-cursore INTO variabile [, variabile]; / * Assegna variabili con i valori della colonna corrente * / CLOSE nome-cursore; / * Chiudi il cursore dopo l'uso * /
In questo esempio, eseguiremo alcune semplici operazioni usando un cursore:
DELIMITER // CREATE PROCEDURE 'proc_CURSOR' (OUT param1 INT) BEGIN DECLARE a, b, c INT; DECLARE cur1 CURSOR FOR SELECT col1 FROM table1; DICHIARARE CONTINUARE HANDLER PER NON TROVATO SET b = 1; OPEN cur1; SET b = 0; SET c = 0; WHILE b = 0 DO FETCH cur1 INTO a; IF b = 0 THEN SET c = c + a; FINISCI SE; FINE MENTRE; CHIUDERE cur1; SET param1 = c; FINE //
Il cursore ha tre proprietà importanti che è necessario conoscere per evitare risultati imprevisti:
In questa lezione, abbiamo trattato i fondamenti delle stored procedure e alcune proprietà specifiche ad essi relative. Naturalmente, è necessario continuare gli studi in settori quali sicurezza, istruzioni SQL e prestazioni prima di poter padroneggiare le routine MySQL.
È necessario valutare i vantaggi che le procedure memorizzate possono potenzialmente apportare alle applicazioni e quindi eseguire un'implementazione ragionevole che soddisfi le proprie esigenze. Io generalmente uso le procedure; i loro benefici in termini di sicurezza, manutenzione del codice e progettazione del software li rendono degni di utilizzo, a mio parere. Inoltre, ricorda che le procedure in MySQL sono ancora in corso. Dovresti aspettarti completamente miglioramenti, in termini di funzionalità e prestazioni nel futuro.я
Non esitate a commentare e condividere le vostre idee e opinioni. E dai un'occhiata agli script di codice mySQL e installa Envato Market per vedere se trovi qualcosa che ti possa aiutare.