2010 06 Stored Code

Embed Size (px)

Citation preview

  • 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