Slideshow transcript
Slide 1: Amsterdam, June 16 2007 ● MySQL: Quick Introduction ● MySQL Stored Routines for PHP developers ● Questions and Discussion Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 1
Slide 2: Roland Bouman (rpbouman.blogspot.com) Certification Developer MySQL AB, Leiden ● MySQL Community Contributor since 2005 ● Joined MySQL AB in July 2006 ● Certification Developer: ● MySQL 5.1 Cluster DBA exam (CMCDBA) ● MySQL Associate exam (CMA) ● Attained: ● CMDEV ● CMDBA ● Formerly: Consultant & Application Developer (mostly Oracle, some MS SQL) Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 2
Slide 3: Amsterdam, June 16 2007 ● MySQL: Quick Introduction ● MySQL Stored Routines for PHP developers ● Questions and Discussion Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 3
Slide 4: MySQL: Quick Introduction ● MySQL Software Products ● RDBMS (Database) ● Monitoring and Advisory Service ● Drivers and APIs ● Client (GUI) Tools & Utilities ● MySQL Professional Services ● Technical Support ● Consulting ● Training ● Certification ● Indemnification Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 4
Slide 5: MySQL Open Source RDBMS Products ● Generally Available, Stable Releases ● MySQL 5.0 Server Community Edition ● Patches from community ● MySQL 5.0 Server Enterprise Edition ● Stablility and Robustness, Early Bugfixes ● Monitoring and Advisory Service ● Binaries ● Development Releases: ● MySQL 5.1 (New: Events, Partitioning) ● MySQL 6.0 (New: Falcon) ● Other RDBMS Products: ● MySQL Cluster / Carrier Grade Edition ● Embedded ● MaxDB (SAP Certified) Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 5
Slide 6: MySQL Monitoring and Advisory Service Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 6
Slide 7: MySQL Drivers and APIs ● For PHP ● ext/mysql: “MySQL Functions” ● ext/mysqli: “MySQL Improved Extension” ● mysqlnd: “MySQL native driver for PHP” ● Beta 5. ● Built Into PHP 5; PHP 6 ● Replaces libmysql ● Other: ● ODBC: Connector/ODBC ● JDBC: Connector/J ● ADO.NET: Connector/.NET Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 7
Slide 8: Amsterdam, June 16 2007 ● MySQL: Quick Introduction ● MySQL Stored Routines for PHP developers ● Questions and Discussion Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 8
Slide 9: MySQL Stored Routines ● Overview of MySQL Stored Routines ● MySQL Stored Routine Language ● PHP Techniques ● Use cases ● Best Practices Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 9
Slide 10: MySQL Stored Routines ● Overview of MySQL Stored Routines: ● Terminology, Purpose, Application ● MySQL Stored Routine Language ● Block Structure, Parameters and Variables, Flow Control Constructs, SQL inside stored routines. ● PHP Techniques ● Creating and Calling Stored Procedures, Processing Result set, Handling Multiple Result sets. ● Use cases ● Best Practices ● What to do on the client, and what on the server ● What to do in PHP, and what in Stored Routines. ● Performance: how MySQL Stored Routines can help or hurt performance. Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 10
Slide 11: MySQL Stored Routines: Overview ● Programs as Database Schema Objects ● Executed in-process with the Database ● Types of Stored Routines: ● Procedures ● Functions ● Triggers ● Events (Temporal triggers; new in MySQL 5.1) ● Language: ● Subset of Standard SQL:2003 SQL/PSM ● Procedural, Block structured ● Do not confuse with User Defined Functions (UDF)! ● Available as of MySQL 5.0 (October 2005) Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 11
Slide 12: MySQL Stored Routine Types: Overview ● Stored Procedures & Functions ● Encapsulate tasks or Calculations for reuse ● Single point of definition for Business Logic ● Source Safely stored and backed up ● Added layer of Security ● Triggers ● Data-Driven ● Enforce Data quality through Basic validation ● Enforce complex Business Rules ● Automatically Update Aggregate tables ● Events (MySQL Server 5.1 beta) ● Schedule Code Execution in time. ● Use instead of cron or windows event scheduler ● Automatically Update Aggregate tables Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 12
Slide 13: MySQL Stored Routines: Purpose / Advantages ● Performance ● Save network roundtrips, lower latency ● Portability and Reuse ● Single point of definition ● Reusable from many application contexts ● Security ● DEFINER versus INVOKER ● Grant only Execution Privilege ● Ease of Maintenance ● Code stored in the database ● Browse using information_schema database ● 'Headless' administrative tasks ● No additional runtime environment required Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 13
Slide 14: MySQL Stored Routines: Caveat / Disadvantages ● Performance ● Overhead may result in higher latency ● Increased usage of database server computing power may negatively affect throughput ● Portability and Reuse ● Which point of view? ● Database portability ? ● Or Application portability? Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 14
Slide 15: MySQL Stored Routines ● Overview of MySQL Stored Routines: ● Terminology, Purpose, Application ● MySQL Stored Routine Language ● Block Structure, Parameters and Variables, Flow Control Constructs, SQL inside stored routines. ● PHP Techniques ● Creating and Calling Stored Procedures, Processing Result set, Handling Multiple Result sets. ● Use cases ● Best Practices ● What to do on the client, and what on the server ● What to do in PHP, and what in Stored Routines. ● How MySQL Stored Routines can help or hurt performance. Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 15
Slide 16: MySQL Stored Routine Language ● Subset of Standard SQL “Persistent Stored Modules” (SQL/PSM) ● Procedural constructs with embedded SQL ● Parameters and (Local) variables ● Manipulate values ● Statement Sequence ● execute statements in order ● Choice ● conditionally execute a particular sequence ● Repetition ● execute a particular sequence multiple times ● A bit like Pascal with embedded SQL statements ● Valid inside all stored routine types ● Can be mixed with most SQL statements Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 16
Slide 17: Creating a MySQL Stored Procedure • Prerequisite: CREATE ROUTINE and ALTER ROUTINE privileges CREATE PROCEDURE sp_hello( p_who VARCHAR(32) ) SELECT CONCAT('Hello, ',v_what,'!!'); DDL statement • CREATE PROCEDURE • Created in the current schema (= database) Name (sp_hello) must be unique with in the • schema, may be qualified (my_db.sp_hello) Parameter (p_who): IN parameter by default • • Procedure body is one single statement, in this case, an ordinary SQL SELECT statement. Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 17
Slide 18: Calling a MySQL Stored Procedure • Prerequisite: EXECUTE ROUTINE privilege CALL sp_hello('PHP'); statement • CALL • Name identifies the procedure within the schema, and maybe qualified: CALL my_schema.sp_hello('PHP') • Must pass a parameter value Result: Hello, PHP! • Result set returned to the client Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 18
Slide 19: Generic Statement Sequence: BEGIN...END CREATE PROCEDURE sp_greating( p_who VARCHAR(32) , p_what VARCHAR(32) ) BEGIN SELECT CONCAT('Hello ', p_who); SELECT CONCAT(p_what,'!'); END is a compound statement; it may • BEGIN...END contain multiple other statements. • Contained statements executed Sequentially (in order of appearance) • (Sidenote: 2 result sets are returned to the client) Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 19
Slide 20: Variables and Parameters CREATE PROCEDURE sp_fibonacci( INOUT p_m INT, INOUT p_n INT, OUT p_s DOUBLE) BEGIN DECLARE v_m INT DEFAULT COALESCE(p_m,0); DECLARE v_n INT DEFAULT COALESCE(p_n,1); SET p_m := v_n; single assignment SET p_n := v_m + v_n multiple , p_s := p_m/p_n; assignments SELECT p_m, p_n, p_s; END; and INOUT parameters • IN, OUT • DECLARE local variables, optionally assign a default value • Use SET to assign values to one or more variables Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 20
Slide 21: Variables and Parameters call sp_fibonacci(@m,@n,@s); ++++ | p_m | p_n | p_s | ++++ | 1 | 1 | 1 | ++++ call sp_fibonacci(@m,@n,@s); ++++ | p_m | p_n | p_s | ++++ | 1 | 2 | 0.5 | ++++ call sp_fibonacci(@m,@n,@s); ++++ | p_m | p_n | p_s | ++++ | 2 | 3 | 0.666666666 | ++++ Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 21
Slide 22: Variable Scope / Visibility BEGIN DECLARE v_script, v_http VARCHAR(32); SET v_script := 'PHP', v_http := 'Apache'; SELECT v_script, v_http; BEGIN DECLARE v_http VARCHAR(32); SET v_http := 'lighttpd'; SELECT v_script, v_http; END; SELECT v_script, v_http; END; • Variables are visible only inside the declaring block • Nearest Scope: inner declarations mask outer ones Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 22
Slide 23: Choice Constructs ● Compound statements ● IF...END IF statement ● Simple test of a single condition ● Conditionally start a sequence of statements (branch) ● Optionally, chooses between two branches Don't confuse with the IF() function! ● ● CASE...END CASE statement ● Conditionally starts one out of multiple branches ● Simple CASE statement ● Just like switch in PHP ● Searched CASE statement ● Just like nested if...elseif...else in PHP ● Don't confuse with the CASE..END expression! Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 23
Slide 24: Syntax: IF...END IF ● Tests condition, branches when TRUE ● Conditional branch can contain a sequence //main, unconditional branch IF <condition> THEN <statements> “true” branch END IF; ● Optionally, include a branch for the other case: IF <condition> THEN <statements> ”true” branch ELSE <statements> ”false” branch END IF; Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 24
Slide 25: IF statement vs IF function ● An IF statement chooses between sequences of statements IF CURRENT_TIME < '12:00:00' THEN SELECT 'Good Morning'; ELSE SELECT 'Good Afternoon'; END IF; function chooses between expressions ● IF SELECT IF(CURRENT_TIME < '12:00:00' , 'Good Morning' , 'Good Afternoon' ); Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 25
Slide 26: Syntax: Simple CASE..END CASE ● Evaluate expression and compare ● Conditional branch can contain a sequence ● Optional ELSE branch ● Just like switch...case in PHP CASE <expression> WHEN <expression1> THEN <statements> WHEN <expression2> THEN <statements> ELSE <statements> END CASE; Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 26
Slide 27: Syntax: Searched CASE..END CASE ● Search first TRUE condition, then branch ● Conditional branch can contain a sequence ● Optional ELSE branch ● Just like if...elsif...else in PHP CASE WHEN <condition> THEN <statements> WHEN <expression> THEN <statements> ELSE <statements> END CASE; Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 27
Slide 28: Repetition ● Unstructured Loop ● No explicit logic to end the loop LOOP <statement> END LOOP; ● Structured ● Logic to end the loop is part of the construct REPEAT WHILE <statement> <condition> UNTIL DO <condition> <statement> END REPEAT; END WHILE; ● Iterate: ● Leave: exit the current block Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 28
Slide 29: Triggers CREATE [DEFINER = { <username> | CURRENT_USER }] TRIGGER <triggername> {BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON <tablename> FOR EACH ROW <singlestatement> ● Automatically executed in response to row- level events occurring on table ● Can refer to OLD and NEW pseudo-records ● INSERT: NEW ● DELETE: OLD both OLD and NEW ● UPDATE: ● Executed as part of transaction Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 29
Slide 30: Event Scheduler (Temporal Triggers) ● New in MySQL 5.1 ● Automatically executed according to time schedule ● Can be recurring ● Can be scheduled to start in the future ● Can be instructed to clean itself up Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 30
Slide 31: MySQL Stored Routines ● Overview of MySQL Stored Routines: ● Terminology, Purpose, Application ● MySQL Stored Routine Language ● Block Structure, Parameters and Variables, Flow Control Constructs, SQL inside stored routines. ● PHP Techniques ● Creating and Calling Stored Procedures, Processing Result Set, Handling Multiple Result Sets. ● Use cases ● Best Practices ● What to do on the client, and what on the server ● What to do in PHP, and what in Stored Routines. ● How MySQL Stored Routines can help or hurt performance. Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 31
Slide 32: PHP and MySQL Stored Routines ● Two relevant PHP extensions ● MySQL Functions (ext/mysql) ● CREATE PROCEDURE and CALL work fine ● Just use the PHP function mysql_query() ● However, obtaining a result set is impossible ● MySQL Improved extension (ext/mysqli) ● use mysqli_query() for one result set ● For multiple resultsets, use mysqli_multi_query() ● mysqli_use_result() ● mysqli_store_result() ● mysqli_next_result() ● mysqli_more_results() ● Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 32
Slide 33: mysql_query() and Stored Routines <?php $db = mysql_connect($host,$usr,$pwd); mysql_select_db('test',$db); $result = mysql_query( \"CALL sp_hello('PHP')\",$db ); $num_rows = mysql_affected_rows($db); echo '<br/>num: ', $num_rows; echo '<br/>msg: ', mysql_error($db); echo '<br/>no: ', mysql_errno($db); ?> num: 1 msg: PROCEDURE test.sp_hello can't return a result set in the given context no: 1312 Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 33
Slide 34: mysqli_query() and Stored Routines <?php $db = mysqli_connect($host,$usr,$pwd); $db>select_db('test'); $result = mysqli_query( $db,\"CALL sp_hello('PHP')\" ); $row = mysqli_fetch_row($result); echo $row[0]; ?> Hello, PHP! Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 34
Slide 35: Handling Multiple result sets <?php $db = mysqli_connect($host,$usr,$pwd); $db>select_db('test'); $db>multi_query( \"CALL sp_greating('PHP','Good Morning')\" ); while($result = $db>store_result()) { while ($row = $result>fetch_row()) { echo $row[0]; } $result>close(); $db>next_result(); } ?> Hello PHP, Good Morning! Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 35
Slide 36: MySQL Stored Routines ● Overview of MySQL Stored Routines: ● Terminology, Purpose, Application ● MySQL Stored Routine Language ● Block Structure, Parameters and Variables, Flow Control Constructs, SQL inside stored routines. ● PHP Techniques ● Creating and Calling Stored Procedures, Processing Result set, Handling Multiple Result sets. ● Use Cases ● Best Practices ● What to do on the client, and what on the server ● What to do in PHP, and what in Stored Routines. ● How MySQL Stored Routines can help or hurt performance. Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 36
Slide 37: MySQL Stored Routine Use Cases ● Stored Procedures ● subtypes and vertical partitioning ● data intensive transformation ● Stored Functions ● domain specific calculations ● data transformation ● Triggers ● Auditing ● Automatically Aggregate tables ● Events ● Logging status ● Updating aggregate tables “Materialized views” ● ETL processes Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 37
Slide 38: MySQL Stored Routines ● Overview of MySQL Stored Routines: ● Terminology, Purpose, Application ● MySQL Stored Routine Language ● Block Structure, Parameters and Variables, Flow Control Constructs, SQL inside stored routines. ● PHP Techniques ● Creating and Calling Stored Procedures, Processing Result set, Handling Multiple Result sets. ● Use Cases ● Best Practices ● What to do on the client, and what on the server ● What to do in PHP, and what in Stored Routines. ● How MySQL Stored Routines can help or hurt performance. Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 38
Slide 39: MySQL Stored Procedures: Best Practices ● Use pure SQL when you can ● Use stored procedures for data-intensive operations ● Don't use stored procedures for complex computation ● Don't use stored procedures for single layer encapsulation ● Simple CRUD layers don't scale ● Stored Procedure should add significant functionality ● Return multiple result sets from stored procedures to reduce network roundtrips Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 39
Slide 40: MySQL Triggers: Best Practices ● Use triggers to enforce integrity of data ● Using triggers does not mean the application can forget about validation Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 40
Slide 41: Amsterdam, June 16 2007 ● MySQL: Quick Introduction ● MySQL Stored Routines for PHP developers ● Questions and Discussion Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 41
Slide 42: Copyright 2007 MySQL AB The World’s Most Popular Open Source Database 42



Add a comment on Slide 1
If you have a SlideShare account, login to comment; else you can comment as a guest- Favorites & Groups
Showing 1-50 of 2 (more)