Date post: | 08-Jul-2018 |
Category: |
Documents |
Upload: | sumit-sharma |
View: | 214 times |
Download: | 0 times |
of 17
8/19/2019 2010 06 Stored Code
1/49
Navigating MySQL StoredProcedures & Functions and
TriggersPresented by:
Sheeri K. Cabral
At ODTUG Kaleidoscope 2010
8/19/2019 2010 06 Stored Code
2/49
200!"2010 Pythian
Who I Am
● MySQL DBA
●
MySQL ser !rou"
● First #rac$e A% Director 'or MySQL
● Lots o' community stu'' (videos) *$og) "odcast on hiatus+
8/19/2019 2010 06 Stored Code
3/49
,tended SQL Synta,●
No "$-s.$
● Stored /outines
– Stored "rocedures – Stored 'unctions
● 0ie1s
● Triggers
8/19/2019 2010 06 Stored Code
4/49
Triggers●
Invo2ed automatica$$y
● BF#/) AFT/
● INS/T) PDAT) DLT
● 3 triggers "er ta*$e
8/19/2019 2010 06 Stored Code
5/49
Data %hanges 1-out Triggering
● T/N%AT
● D/#P
● Foreign 2ey cascading actions
–
Fi,ed 1hen 'oreign 2eys in a$$ storage engines – Sti$$ in the distance
8/19/2019 2010 06 Stored Code
6/49
Data %hanges that Trigger
● /PLA%
– A$1ays INS/T) sometimes DLT too
● INS/T444#N DPLI%AT 56 PDAT
– INS/T ,or PDAT
● L#AD DATA INFIL
– insert
8/19/2019 2010 06 Stored Code
7/49
%reating a trigger ●
T/I!!/ "rivi$ege – g$o*a$) d*) t*$
– di''erent *e'ore MySQL 74843
CREATE TRIGGER trg_name[ BEFORE | AFTER ]
[ INSERT | UPDATE | DELETE ]
ON tbl_nameFOR EACH RO !!!!
8/19/2019 2010 06 Stored Code
8/49
%on'$icts●
Same trigger nameERROR "#$% &H'((()* Tr+gger alrea,- e.+/t/
● Same com*ination o'9
– BF#/ - AFT/
– INS/T - PDAT - DLT
ERROR "0#$ &10((()* T2+/ 3er/+4n 45 6-S7L
,4e/n8t -et /9::4rt 8m9lt+:le tr+gger/ ;+t2 t2e/ame a
8/19/2019 2010 06 Stored Code
9/49
Sam"$e Trigger
CREATE TRIGGER /ta55_9:,ate_,ate
BEFORE INSERT ON /ta55
FOR EACH RO
SET NE!
● NW : a$ias 'or ne1 ro1(s+ inserted
8/19/2019 2010 06 Stored Code
10/49
NW and #LD a$iases●
NW – BEFORE INSERT
– BEFORE UPDATE
●
#LD – AFTER UPDATE
– AFTER DELETE
● N#N
– AFTER INSERT
– BEFORE DELETE
8/19/2019 2010 06 Stored Code
11/49
Dro""ing a Trigger
● DROP TRIGGER trg_name>
● DROP TRIGGER IF E?ISTS trg_name>
8/19/2019 2010 06 Stored Code
12/49
Mu$ti"$e SQL statements
● For triggers and others
● Wi$$ *e using ; – So set DLIMIT/ 'irst
● @ FOR EACH RO BEGIN @ END
8/19/2019 2010 06 Stored Code
13/49
Mu$ti"$e SQL Statements
DELIMITER |
CREATE TRIGGER be54re_/ta55_+n/ert
BEFORE INSERT ON /ta55
FOR EACH RO BEGIN
INSERT INTO /ta55_
END |
DELIMITER ;
8/19/2019 2010 06 Stored Code
14/49
%hanging a Trigger
● No ALT/ T/I!!/
SELECT FRO6INFOR6ATION_SCHE6A!TRIGGERS HERETRIGGER_SCHE6A=8,b_name8 ANDTRIGGER_NA6E=8trg_name8
SHO CREATE TRIGGER trg_name>
8/19/2019 2010 06 Stored Code
15/49
Triggers on S"ecia$ Ta*$es
● Triggers are not su""orted on9
– 0ie1s – Tem"orary ta*$es
8/19/2019 2010 06 Stored Code
16/49
Trigger /untime Behavior
● s.$
8/19/2019 2010 06 Stored Code
17/49
Permissions
CREATE DEFINER=[ 9/er24/t | CURRENT_USER&) ]
TRIGGER trg_name
[ BEFORE | AFTER ] [ INSERT|UPDATE|DELETE]
ON tbl_name FOR EACH RO BEGIN @ END>
● /e.uires SP/ "rivi$ege to set 9/er24/t
8/19/2019 2010 06 Stored Code
18/49
Finding Triggers
SELECT FRO6INFOR6ATION_SCHE6A!TRIGGERS HERETRIGGER_SCHE6A=8,b_name8>
SHO TRIGGERS>
SHO TRIGGERS FRO6 8,b_name8>
SHO TRIGGERS LIE 8trg_name8>
8/19/2019 2010 06 Stored Code
19/49
Triggers and /e"$ication
● CREATEDROP TRIGGER not re"$icated
● Statement=*ased re"$ication
– Actions not saved to *inary $og – Put triggers on master and s$ave
● /o1=*ased re"$ication
–
A$$ changes are saved to *inary $og – Triggers on master on$y
● Mi,ed acts $i2e ro1=*ased
8/19/2019 2010 06 Stored Code
20/49
Triggers %annot9
● Modi'y a ta*$e *eing used *y the DML 1ithoutNW or #LD a$iases
●
Be de'ined on a m-/l ta*$e● se SELECT 1ithout INTO 3ar+able_name
● se SHO commands
● se LOAD DATATABLE● se BACUPRESTORE DATABASE
8/19/2019 2010 06 Stored Code
21/49
Triggers %annot9
● se "re"ared statement commands
PREPARE E?ECUTE DEALLOCATE PREPARE
● se FLUSH statements● Invo2e a DF to ca$$ an e,terna$ a""$ication
● se ALTER IE
● se RETURN
8/19/2019 2010 06 Stored Code
22/49
Triggers cannot cause %#MMIT - /#LLBA%5
CO66IT
ROLLBAC
START TRANSACTION BEGIN BEGIN OR
LOC UNLOC TABLES
SET AUTOCO66IT="
TRUNCATE TABLE
Most ALTER CREATE DROP RENA6E stmts
8/19/2019 2010 06 Stored Code
23/49
Stored /outines●
Per'ormance – %ached per connection
● Stored "rocedure
– Ta2es in > or more args
– #ut"uts a resu$t set
● Stored 'unction
– Ta2es in > or more args
– #ut"uts a sca$ar va$ue
8/19/2019 2010 06 Stored Code
24/49
Simi$ar to Triggers
DELI6ITER |
CREATE PROCEDURE /t4re_455er+ng/
(IN p_store_id TINYINT UNSIGNED, OUT p_count INT UNSIGNED
SELECT COUNT&) INTO :_ |
DELI6ITER >
8/19/2019 2010 06 Stored Code
25/49
No In"ut-#ut"ut
DELI6ITER |
CREATE PROCEDURE 9:,ate_all_/ta55_t+me &)
UPDATE /ta55
SET la/t_9:,ate=NO&) HERE "="> |
DELI6ITER >
8/19/2019 2010 06 Stored Code
26/49
Invo2ing a Stored Procedurem-/l CALL /t4re_455er+ng/ &" /t4re_")>
79er- O ( r4;/ a55e
8/19/2019 2010 06 Stored Code
27/49
Dro""ing a Stored Procedure
DROP PROCEDURE /t4re_455er+ng/>
DROP PROCEDURE IF E?ISTS/t4re_455er+ng/;
8/19/2019 2010 06 Stored Code
28/49
Mu$ti"$e SQL statements
DELI6ITER |
CREATE PROCEDURE 9:,ate_all_/ta55_t+me &)
UPDATE /ta55
BEGIN
SET la/t_9:,ate=NO&) HERE "="> |
END
DELI6ITER >
8/19/2019 2010 06 Stored Code
29/49
IN#T arguments
DELI6ITER |
CREATE PROCEDURE +n
8/19/2019 2010 06 Stored Code
30/49
Loca$ varia*$es●
DECLARE 3ar ,ata_t-:e at *ody *eginningDELI6ITER |CREATE PROCEDURE :
8/19/2019 2010 06 Stored Code
31/49
Stored Procedure /untime Behavior
● s.$
8/19/2019 2010 06 Stored Code
32/49
8/19/2019 2010 06 Stored Code
33/49
#ther o"tions (o"tiona$+● CO66ENT
● [ NOT ] DETER6INISTIC
● SQL usage
–
6ODIFIES S7L DATA – READS S7L DATA
– CONTAINS S7L
– NO S7L
● ALT/ P/#%D/ can change
– DEFINER S7L SECURIT' CO66ENT
8/19/2019 2010 06 Stored Code
34/49
Fu$$ %/AT P/#%D/ Synta,CREATE
[ DEFINER = 9/er24/t | CURRENT_USER M ]
PROCEDURE :_name & [ :arameter_l+/t ] )
[ 4:t+4n @ ]
BEGIN @ END● #"tion is one or more o'9
S7L SECURIT' DEFINER | INOERM
CO66ENT 8
8/19/2019 2010 06 Stored Code
35/49
Stored Function● 0ery simi$ar to stored "rocedure
● #ut"ut is sca$ar on$y
– #n$y IN "arameters) no IN#T or #T
●
Must use /T/NS c$ause – De'ines 1hat data ty"e 1i$$ *e returned
● Must use /T/N statement at end
– To actua$$y return data
8/19/2019 2010 06 Stored Code
36/49
,am"$e Stored FunctionDELI6ITER |
CREATE FUNCTION get_/t4re_+, &5_/ta55_+,TIN'INT UNSIGNED)
RETURNS TIN'INT UNSIGNED
BEGIN DECLARE 5_/t4re_+, TIN'INT UNSIGNED>
SELECT /t4re_+, INTO 5_/t4re_+, FRO6 /ta55HERE /ta55_+,=5_/ta55_+,>
RETURN 5_/t4re_+,>
END |
DELI6ITER >
8/19/2019 2010 06 Stored Code
37/49
Invo2ing a Stored Function● No CALL $i2e stored "rocedure
● @ust as a regu$ar 'unction
m-/l SELECT get_/t4re_+,&")>JJJJJJJJJJJJJJJJJ| get_/t4re_+,&") |JJJJJJJJJJJJJJJJJ
| " |JJJJJJJJJJJJJJJJJ" r4; +n /et &(!(( /e
8/19/2019 2010 06 Stored Code
38/49
Stored /outine rrors and Warnings
● As i' statements 1ere run on command$ine
●
No indication o' 1hich $ine 'ai$ed
● No indication o' 1hich stored routine 'ai$ed
8/19/2019 2010 06 Stored Code
39/49
%onditions and and$ers
DECLARE
CONTINUE | E?IT | UNDO M
HANDLER FOR
8/19/2019 2010 06 Stored Code
40/49
cond
8/19/2019 2010 06 Stored Code
41/49
,am"$eDELI6ITER |
CREATE PROCEDURE :
8/19/2019 2010 06 Stored Code
42/49
%onditionsDECLARE
8/19/2019 2010 06 Stored Code
43/49
St d / ti F$ % t $
8/19/2019 2010 06 Stored Code
44/49
Stored /outine F$o1 %ontro$
CASE HEN
8/19/2019 2010 06 Stored Code
45/49
Loo"s
8/19/2019 2010 06 Stored Code
46/49
Loo"s
[label*] LOOP
/tatement_l+/t
END LOOP [label]
ITERATE label
LEAE label
%ursors
8/19/2019 2010 06 Stored Code
47/49
%ursors
DECLARE
8/19/2019 2010 06 Stored Code
48/49
DELI6ITER |CREATE PROCEDURE
8/19/2019 2010 06 Stored Code
49/49
Questions) comments) etc● 0ie1s
● Post 1ith $in2s to "$ay-do1n$oad video)do1n$oad s$ides) notes9
● htt"9--1114technocation4org-node-3C8