You are on page 1of 165

ADVANCED MYSQL

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/1

Review Relational Model Terminology


Relation is a two-dimensional table Attributes are single valued Each attribute belongs to a domain
A domain is a physical and logical description of permittable values

No two rows are identical Order is unimportant The row is called a tuple
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/2

Relational Algebra
Relational algebra defines a set of operators that may work on relations. Recall that relations are simply data sets. As such, relational algebra deals with set theory. The operators in relational algebra are very similar to traditional algebra except that they apply to sets.
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/3

Relational Algebra Operators


Relational algebra provides several operators:
Union Difference Intersection Product Projection Selection Join

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/4

Union Operator
The union operator adds tuples from one relation to another relation A union operation will result in combined relation This is similar to the logical operator OR

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/5

Union Operator
JUNIOR and HONOR-STUDENT relations and their union:
(a) Example of JUNIOR relation (b) Example HONORSTUDENT relation (c) Union of JUNIOR and HONORSTUDENT relations
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/6

Difference Operator
The difference operator produces a third relation that contains the tuples that appear in the first relation, but not the second This is similar to a subtraction

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/7

Difference Operator
JUNIOR relation HONORSTUDENT relation JUNIOR minus HONORSTUDENT relation
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/8

Intersection Operator
An intersection operation will produce a third relation that contains the tuples that are common to the relations involved. This is similar to the logical operator AND

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/9

Intersection Operator
JUNIOR relation HONORSTUDENT relation Intersection of JUNIOR and HONORSTUDENT relations
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/10

Product Operator
A product operator is a concatenation of every tuple in one relation with every tuple in a second relation The resulting relation will have n x m tuples, where
n = the number of tuples in the first relation and m = the number of tuples in the second relation

This is similar to multiplication

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/11

Projection Operator
A projection operation produces a second relation that is a subset of the first. The subset is in terms of columns, not tuples The resulting relation will contain a limited number of columns. However, every tuple will be listed.
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/12

Selection Operator
The selection operator is similar to the projection operator. It produces a second relation that is a subset of the first. However, the selection operator produces a subset of tuples, not columns. The resulting relation contains all columns, but only contains a portion of the tuples.

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/13

Join Operator
The join operator is a combination of the product, selection, and projection operators. There are several variations of the join operator
Equijoin Natural join Outer join
Left outer join Right outer join

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/14

Data for Join Examples


SID Name Major GradeLevel

123
158 271 105

Jones
Parks Smith Anderson

History
Math History Management ClassName H350

JR
GR JR SN PositionNumber 1

StudentNumber 123

105
123

BA490
B490

3
7
Chapter 7/15

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Join Examples
Equijoin

Natural Join

Left Outer Join


Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/16

Expressing Queries in Relational Algebra


1. What are the names of all students? STUDENT [Name] 2. What are the student numbers of all students enrolled in a class? ENROLLMENT [StudentNumber]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/17

Expressing Queries in Relational Algebra


3. What are the student numbers of all students not enrolled in a class?
STUDENT [SID] ENROLLMENT [StudentNumber]

4. What are the numbers of students enrolled in the class BD445?


ENROLLMENT WHERE ClassName = BD445[StudentNumber]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/18

Expressing Queries in Relational Algebra


5. What are the names of the students enrolled in class BD445?
STUDENT JOIN (SID = StudentNumber) ENROLLMENT WHERE ClassName = BD445[STUDENT.Name]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/19

Expressing Queries in Relational Algebra


6. What are the names and meeting times of PARKS classes?
STUDENT WHERE Name = PARKS JOIN (SID=StudentNumber) ENROLLMENT JOIN (ClassName = Name) CLASS [CLASS.Name, Time]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/20

Expressing Queries in Relational Algebra


7. What are the grade levels and meeting rooms of all students, including students not enrolled in a class?
STUDENT LEFT OUTER JOIN
(SID = StudentNumber) ENROLLMENT JOIN (ClassName = Name) CLASS [GradeLevel, Room]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/21

Summary of Relational Algebra Operators

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/22

Using SQL in Applications

Fundamentals, Design, and Implementation, 9/e

View Ridge Gallery


View Ridge Gallery is a small art gallery that has been in business for 30 years It sells contemporary European and North American fine art View Ridge has one owner, three salespeople, and two workers View Ridge owns all of the art that it sells; it holds no items on a consignment basis

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/24

Application Requirements
View Ridge application requirements
Track customers and their artist interests Record gallery's purchases Record customers' art purchases List the artists and works that have appeared in the gallery Report how fast an artist's works have sold and at what margin Show current inventory in a Web page
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/25

View Ridge Data Model

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/26

View Ridge Data Model


Problems: the keys for WORK and TRANSACTION are huge and the key for CUSTOMER is doubtful as many customers may not have an email address

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/27

Surrogate Key Database Design

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/28

Sample Values

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/29

Sample Values

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/30

Sample Values

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/31

Sample Values

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/32

Sample Values

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/33

CHECK CONSTRAINT
CHECK CONSTRAINT defines limits for column values Two common uses
Specifying a range of allowed values Specifying an enumerated list

CHECK constraints may be used


To compare the value of one column to another To specify the format of column values With subqueries
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/34

SQL Views
SQL view is a virtual table that is constructed from other tables or views It has no data of its own, but obtains data from tables or other views SELECT statements are used to define views
A view definition may not include an ORDER BY clause

SQL views are a subset of the external views


They can be used only for external views that involve one multi-valued path through the schema

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/35

SQL Views
Views may be used to
Hide columns or rows Show the results of computed columns Hide complicated SQL statements Provide a level of indirection between application programs and tables Assign different sets of processing permissions to tables Assign different sets of triggers
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/36

CREATE VIEW SYNTAX


CREATE [OR REPLACE] ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/37

Example: CREATE VIEW


CREATE VIEW CustomerNameView AS SELECT Name AS CustomerName FROM CUSTOMER; SELECT * FROM CustomerNameView ORDER BY CustomerName;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/38

EXAMPLE

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/39

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/40

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/41

Updating Views
Views may or may not be updatable Rules for updating views are both complicated and DBMS-specific

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/42

Updating Views
Guidelines:

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/43

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/44

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/45

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/46

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/47

ALTER VIEW SYNTAX


ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}] [DEFINER = { user | CURRENT_USER }] [SQL SECURITY { DEFINER | INVOKER }] VIEW view_name [(column_list)] AS select_statement [WITH [CASCADED | LOCAL] CHECK OPTION]
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/48

CHECK TABLE
CHECK TABLE view_name: to check the validation of views

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/49

EXAMPLE

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/50

DROP VIEW SYNTAX


DROP VIEW [IF EXISTS] view_name [, view_name] ... [RESTRICT | CASCADE]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/51

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/52

Importing and Exporting data


Using LOAD DATA INFILE statement to import data from files Using SELECT INTO OUTFILE statement to export data to files Using mysqldump in command lines

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/53

Importing data from files


LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE tbl_name [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char'] ] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] ] [IGNORE number LINES] [(col_name,...)]
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/54

EXAMPLES

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/55

EXPORTING DATA
SELECT [ALL | DISTINCT | DISTINCTROW ] [HIGH_PRIORITY] [STRAIGHT_JOIN] [SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT] [SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS] select_expr [, select_expr ...] [FROM table_references [WHERE where_condition] [GROUP BY {col_name | expr | position} [ASC | DESC], ... [WITH ROLLUP]] [HAVING where_condition] [ORDER BY {col_name | expr | position} [ASC | DESC], ...] [LIMIT {[offset,] row_count | row_count OFFSET offset}] [PROCEDURE procedure_name(argument_list)] [INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' | INTO var_name [, var_name]] [FOR UPDATE | LOCK IN SHARE MODE]]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/56

EXAMPLES

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/57

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/58

EXPORTING DATA WITH MYSQLDUMP


shell> mysqldump [options] db_name [tbl_name ...] shell> mysqldump [options] -databases db_name ... shell> mysqldump [options] --alldatabases

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/59

EXAMPLE

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/60

EXAMPLE

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/61

EXAMPLE

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/62

RESTORE DATA

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/63

Embedding SQL In Program Code


SQL can be embedded in triggers, stored procedures, and program code Problem: assigning SQL table columns with program variables Solution: object-oriented programming, PL/SQL Problem: paradigm mismatch between SQL and application programming language
SQL statements return sets of rows; an applications work on one row at a time

Solution: process the SQL results as pseudo-files


Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/64

Triggers
A trigger is a stored program that is executed by the DBMS whenever a specified event occurs on a specified table or view Three trigger types: BEFORE, INSTEAD OF, and AFTER
Each type can be declared for Insert, Update, and Delete Resulting in a total of nine trigger types

Oracle supports all nine trigger types SQL Server supports six trigger types (only for INSTEAD OF and AFTER triggers)
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/65

CREATE TRIGGERS
CREATE TRIGGER trigger_name {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON table_name FOR EACH ROW trigger_statement

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/66

Firing Triggers
When a trigger is fired, the DBMS supplies
Old and new values for the update New values for inserts Old values for deletions

The way the values are supplied depends on the DBMS product Trigger applications:
Checking validity (Figure 7-14) Providing default values (Figure 7-15) Updating views (Figure 7-16) Enforcing referential integrity actions (Figure 7-17, 7-18)
Chapter 7/67

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

EXAMPLES

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/68

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/69

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/70

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/71

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/72

DROP TRIGGER
DROP TRIGGER trigger_name

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/73

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/74

User Variables and Prepared Statements


User varibles Using prepared statements with mysql

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/75

User Variable Syntax


SET @var_name = expr [, @var_name = expr] ... User variables can be assigned a value from a limited set of data types: integer, decimal, floating-point, binary or nonbinary string, or NULL value

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/76

EXAMPLES

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/77

String operators

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/78

Read a file of maximum_allowed_package bytes (1GB)


Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/79

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/80

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/81

Syntax
PREPARE stmt_name FROM preparable_stmt EXECUTE stmt_name [USING @var_name [, @var_name] ...] {DEALLOCATE | DROP} PREPARE stmt_name

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/82

Prepare statement
mysql> PREPARE stmt1 FROM 'SELECT SQRT(POW(?,2) + POW(?,2)) AS hethuctamgiacvuong'; mysql> SET @a = 3; mysql> SET @b = 4; mysql> EXECUTE stmt1 USING @a, @b;
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/83

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/84

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/85

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/86

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/87

Drop Prepare

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/88

E-PROJECT
Nhom 1: Men (TL), Phu, Trong Nhom 2: Tu, Khai (TL), Quyet, Hien

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/89

Ni dung
La chn v gii thiu ch (c kho st thc t) Thit k c s d liu, quan h gia cc bng (quan h cc bng c biu din bng s ) D liu >=50 records S dng View cho cc truy vn trn nhiu bng
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/90

Export kt qu ra file txt hoc xls S dng triggers kim sot nhp, xut d liu S dng cc stored functions, routines Phn quyn ngi dng (root,admin,users) Cho php kt ni database server t nhiu ip khc nhau

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/91

Bo co
Th 7 (3/12/2011) : trnh by trn lp File export (.txt, .xls), file .word, .ppt, .sql

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/92

Stored Procedures
A stored procedure is a program that is stored within the database and is compiled when used
In Oracle, it can be written in PL/SQL or Java In SQL Server, it can be written in TRANSACT-SQL

Stored procedures can receive input parameters and they can return results Stored procedures can be called from
Programs written in standard languages, e.g., Java, C# Scripting languages, e.g., JavaScript, VBScript SQL command prompt, e.g., SQL Plus, Query Analyzer

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/93

Stored Procedure Advantages


Greater security as store procedures are always stored on the database server Decreased network traffic SQL can be optimized by the DBMS compiler Code sharing resulting in
Less work Standardized processing Specialization among developers
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/94

Define Procedure Syntax


CREATE [DEFINER = { user | CURRENT_USER }] PROCEDURE sp_name ([proc_parameter[,...]]) [characteristic ...] routine_body

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/95

Define Function Syntax


CREATE [DEFINER = { user | CURRENT_USER }] FUNCTION sp_name ([func_parameter[,...]]) RETURNS type [characteristic ...] routine_body

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/96

Examples

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/97

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/98

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/99

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/100

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/101

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/102

IN and OUT

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/103

Declare statement
Used for declaring varibles, conditions Syntax: DECLARE var_name data_type

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/104

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/105

Conditions and Handlers


Conditions may arise during stored program execution that require special handling, such as exiting the current program block or continuing execution. Handlers can be defined for general conditions such as warnings or exceptions, or for specific conditions such as a particular error code. Specific conditions can be assigned names and referred to that way in handlers.
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/106

Conditions Declare syntax


DECLARE condition_name CONDITION FOR condition_value condition_value: mysql_error_code | SQLSTATE [VALUE] sqlstate_value

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/107

EXAMPLE

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/108

Handlers Declare syntax


DECLARE handler_action HANDLER FOR condition_value [, condition_value] ... statement handler_action: CONTINUE | EXIT | UNDO condition_value: mysql_error_code | SQLSTATE [VALUE] sqlstate_value | condition_name | SQLWARNING | NOT FOUND | SQLEXCEPTION
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/109

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/110

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/111

CURSORS
MySQL supports cursors inside stored programs. The syntax is as in embedded SQL. Cursors have these properties: 1. Asensitive: The server may or may not make a copy of its result table 2. Read only: Not updatable 3. Nonscrollable: Can be traversed only in one direction and cannot skip rows Cursors must be declared before declaring handlers and after declaring variables and conditions.
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/112

DECLARE cursor_name CURSOR FOR select_statement OPEN cursor_name FETCH cursor_name INTO var_name [, var_name] ... CLOSE cursor_name

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/113

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/114

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/115

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/116

Flow control
IF and CASE: conditional testing LOOP, REPEAT, WHILE: loops

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/117

IF search_condition THEN statement_list [ELSEIF search_condition THEN statement_list] ... [ELSE statement_list] END IF

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/118

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/119

CASE case_value WHEN when_value THEN statement_list [WHEN when_value THEN statement_list] ... [ELSE statement_list] END CASE
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/120

Attention: Transfer of Control


LEAVE label: transfer to the end of the named construct ITERATE label: transfer to the beginning of the named construct Transfer of Control can be used with blocks and loops

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/121

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/122

[begin_label:] LOOP statement_list END LOOP [end_label]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/123

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/124

[begin_label:] WHILE search_condition DO statement_list END WHILE [end_label]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/125

[begin_label:] REPEAT statement_list UNTIL search_condition END REPEAT [end_label]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/126

Drop Procedure, Functions


DROP PROCEDURE proc_name DROP FUNCTION func_name

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/127

Account Management Statements


CREATE user DROP user RENAME user GRANT syntax

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/128

CREATE USER syntax


CREATE USER user_specification [, user_specification] ... user_specification: user [IDENTIFIED BY [PASSWORD] 'password']

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/129

RENAME USER syntax


RENAME USER old_user TO new_user [, old_user TO new_user] ...

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/130

DROP USER syntax


DROP USER username

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/131

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/132

GRANT syntax
GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level TO user_specification [, user_specification] ... [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}] [WITH with_option ...]

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/133

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/134

Debugging MYSQL Applications


Interpret error messages Using SHOW WARNINGS and SHOW ERRORS statements perror

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/135

SHOW WARNINGS statement

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/136

SHOW ERRORS statement

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/137

Using SQL In Application Code


SQL can be embedded in application programs Several SQL statements need to be executed to populate an external view The application program causes the statements to be executed and then displays the results of the query in the forms grid controls

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/138

Using SQL In Application Code (cont.)


The application program also processes and coordinates user actions on a form, including
Populating a drop-down list box Making the appropriate changes to foreign keys to create record relationships

The particulars by which SQL code is inserted into applications depend on the language and data-manipulation methodology used
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/139

Review Introduction to MySQL

Fundamentals, Design, and Implementation, 9/e

More features
Cross-database joins Outer joins API: C/C++, Eiffel, Java, PHP, Perl, Python, TCL Runs on Windows, UNIX, and Mac High performance

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/141

SQL syntax
CREATE TABLE people (name CHAR(10)) INSERT INTO people VALUES (Joe) SELECT name FROM people WHERE name like J%

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/142

SQL commands
SHOW DATABASES SHOW TABLES Data types: INT, REAL, CHAR(l), VARCHAR(l), TEXT(l), DATE, TIME ALTER TABLE mytable MODIFY mycolumn TEXT(100) ENUM(cat,dog,rabbit,pig)
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/143

SQL commands
CREATE DATABASE dbname CREATE TABLE tname (id NOT NULL PRIMARY KEY AUTO_INCREMENT) CREATE INDEX part_of_name ON customer (name(10)) INSERT INTO tname (c1, , cn) values (v1, , vn)
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/144

JOINs and ALIASing


SELECT book.title, author.name
FROM author, book WHERE books.author = author.id SELECT very_long_column_name AS col FROM tname WHERE col=5

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/145

Loading text files


Comma-separated files (*.csv) LOAD DATA LOCAL INFILE "whatever.csv" INTO TABLE tname

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/146

Aggregate queries
SELECT position FROM people GROUP by position SELECT position, AVG (salary) FROM people GROUP BY position HAVING AVG (salary) > 50000.00

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/147

Full text search


CREATE TABLE WebCache (
url VARCHAR (255) NOT NULL PRIMARY KEY, ptext TEXT NOT NULL, FULLTEXT (ptext));

INSERT INTO WebCache (url, ptext) VALUES (index.html, Welcome to the University of Michigan); SELECT url from WebCache WHERE MATCH (ptext) against (Michigan);

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/148

Advanced features
Transactions Table locking Functions Unions Outer joins

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/149

Installing MySQL on Windows


http://www.mysql.com/products/mysql / http://www.webdevelopersnotes.com/t utorials/sql/index.php3

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/150

Useful pointers
Small example: http://www.itl.nist.gov/div897/ctg/dm/sql_exa mples.htm MySQL documentation: http://www.mysql.com/doc/en/index.html (official) MySQL tutorial: http://www.mysql.com/doc/en/Tutorial.html Online, interactive tutorials: http://sqlzoo.net/ http://sql.grussell.org/
Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke Chapter 7/151

http://www.itl.nist.gov/div897/ctg/dm/sql_examples.htm

use test;

CREATE TABLE STATION (ID INTEGER PRIMARY KEY, CITY CHAR(20), STATE CHAR(2), LAT_N REAL, LONG_W REAL);

DESCRIBE STATION;

INSERT INTO STATION VALUES (13, 'Phoenix', 'AZ', 33, 112); INSERT INTO STATION VALUES (44, 'Denver', 'CO', 40, 105); INSERT INTO STATION VALUES (66, 'Caribou', 'ME', 47, 68);

SELECT * FROM STATION;

SELECT * FROM STATION WHERE LAT_N > 39.7; Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/152

SELECT ID, CITY, STATE FROM STATION; ID CITY STATE ;

SELECT ID, CITY, STATE FROM STATION WHERE LAT_N > 39.7;

CREATE TABLE STATS (ID INTEGER REFERENCES STATION(ID), MONTH INTEGER CHECK (MONTH BETWEEN 1 AND 12), TEMP_F REAL CHECK (TEMP_F BETWEEN -80 AND 150), RAIN_I REAL CHECK (RAIN_I BETWEEN 0 AND 100), PRIMARY KEY (ID, MONTH));

INSERT INTO STATS VALUES (13, 1, 57.4, 0.31); INSERT INTO STATS VALUES (13, 7, 91.7, 5.15); INSERT INTO STATS VALUES (44, 1, 27.3, 0.18); INSERT INTO STATS VALUES (44, 7, 74.8, 2.11); INSERT INTO STATS VALUES (66, 1, 6.7, 2.10);

INSERT INTO STATS VALUES (66, 7, 65.8, 4.52);

SELECT * FROM STATS;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/153

SELECT * FROM STATION, STATS

WHERE STATION.ID = STATS.ID;

SELECT MONTH, ID, RAIN_I, TEMP_F FROM STATS ORDER BY MONTH, RAIN_I DESC;

SELECT LAT_N, CITY, TEMP_F FROM STATS, STATION WHERE MONTH = 7 AND STATS.ID = STATION.ID ORDER BY TEMP_F;

SELECT MAX(TEMP_F), MIN(TEMP_F), AVG(RAIN_I), ID FROM STATS GROUP BY ID;

SELECT * FROM STATION


WHERE 50 < (SELECT AVG(TEMP_F) FROM STATS WHERE STATION.ID = STATS.ID);

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/154

CREATE VIEW METRIC_STATS (ID, MONTH, TEMP_C, RAIN_C) AS

SELECT ID,
MONTH, (TEMP_F - 32) * 5 /9, RAIN_I * 0.3937 FROM STATS;

SELECT * FROM METRIC_STATS;

SELECT * FROM METRIC_STATS WHERE TEMP_C < 0 AND MONTH = 1 ORDER BY RAIN_C;

UPDATE STATS SET RAIN_I = RAIN_I + 0.01;

SELECT * FROM STATS;

UPDATE STATS SET TEMP_F = 74.9


WHERE ID = 44 AND MONTH = 7;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/155

SELECT * FROM STATS;

COMMIT WORK;

UPDATE STATS SET RAIN_I = 4.50 WHERE ID = 44;

SELECT * FROM STATS;

ROLLBACK WORK;

SELECT * FROM STATS;

UPDATE STATS SET RAIN_I = 4.50 WHERE ID = 44 AND MONTH = 7;

COMMIT WORK;

SELECT * FROM STATS;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/156

DELETE FROM STATS

WHERE MONTH = 7
OR ID IN (SELECT ID FROM STATION WHERE LONG_W < 90);

DELETE FROM STATION WHERE LONG_W < 90;

COMMIT WORK;

SELECT * FROM STATION;

SELECT * FROM STATS;

SELECT * FROM METRIC_STATS;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/157

http://www.mysql.com/doc/en/Tutorial.html

CREATE TABLE animals (


id MEDIUMINT NOT NULL AUTO_INCREMENT, name CHAR(30) NOT NULL, PRIMARY KEY (id) );

INSERT INTO animals (name) VALUES ("dog"),("cat"),("penguin"), ("lax"),("whale"),("ostrich"); SELECT * FROM animals;

CREATE TABLE shop ( article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL, dealer CHAR(20) price DOUBLE(16,2) DEFAULT '' NOT NULL,

DEFAULT '0.00' NOT NULL,

PRIMARY KEY(article, dealer));

INSERT INTO shop VALUES


(1,'A',3.45),(1,'B',3.99),(2,'A',10.99),(3,'B',1.45),(3,'C',1.69), (3,'D',1.25),(4,'D',19.95);

SELECT * FROM shop; Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/158

CREATE TABLE articles (

id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,


title VARCHAR(200), body TEXT, FULLTEXT (title,body) );

INSERT INTO articles VALUES (NULL,'MySQL Tutorial', 'DBMS stands for DataBase ...'), (NULL,'How To Use MySQL Efficiently', 'After you went through a ...'), (NULL,'Optimizing MySQL','In this tutorial we will show ...'), (NULL,'1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),

(NULL,'MySQL vs. YourSQL', 'In the following database comparison ...'), (NULL,'MySQL Security', 'When configured properly, MySQL ...');

SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database');

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/159

# What's the highest item number?

SELECT MAX(article) AS article FROM shop;

# Find number, dealer, and price of the most expensive article.

SELECT MAX(price) FROM shop;

SELECT article, dealer, price FROM shop WHERE price=19.95;

SELECT article, dealer, price FROM shop ORDER BY price DESC LIMIT 1;

# What's the highest price per article?

SELECT article, MAX(price) AS price FROM shop GROUP BY article; Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/160

CREATE TEMPORARY TABLE tmp (

article INT(4) UNSIGNED ZEROFILL DEFAULT '0000' NOT NULL,


price DOUBLE(16,2) DEFAULT '0.00' NOT NULL);

LOCK TABLES shop READ;

INSERT INTO tmp SELECT article, MAX(price) FROM shop GROUP BY article;

SELECT shop.article, dealer, shop.price FROM shop, tmp WHERE shop.article=tmp.article AND shop.price=tmp.price;

UNLOCK TABLES;

DROP TABLE tmp; SELECT article, SUBSTRING( MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 7) AS dealer,

0.00+LEFT(
FROM shop

MAX( CONCAT(LPAD(price,6,'0'),dealer) ), 6) AS price

GROUP BY article;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/161

# find the articles with the highest and lowest price

SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop;

SELECT * FROM shop WHERE price=@min_price OR price=@max_price;

# foreign keys

CREATE TABLE person ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, name CHAR(60) NOT NULL, PRIMARY KEY (id) );

CREATE TABLE shirt ( id SMALLINT UNSIGNED NOT NULL AUTO_INCREMENT, style ENUM('t-shirt', 'polo', 'dress') NOT NULL,

color ENUM('red', 'blue', 'orange', 'white', 'black') NOT NULL,


owner SMALLINT UNSIGNED NOT NULL REFERENCES person(id), PRIMARY KEY (id) ); Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/162

INSERT INTO person VALUES (NULL, 'Antonio Paz');

INSERT INTO shirt VALUES (NULL, 'polo', 'blue', LAST_INSERT_ID()), (NULL, 'dress', 'white', LAST_INSERT_ID()), (NULL, 't-shirt', 'blue', LAST_INSERT_ID());

INSERT INTO person VALUES (NULL, 'Lilliana Angelovska');

INSERT INTO shirt VALUES (NULL, 'dress', 'orange', LAST_INSERT_ID()), (NULL, 'polo', 'red', LAST_INSERT_ID()), (NULL, 'dress', 'blue', LAST_INSERT_ID()), (NULL, 't-shirt', 'white', LAST_INSERT_ID());

SELECT * FROM person;

SELECT * FROM shirt;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/163

SELECT s.* FROM person p, shirt s

WHERE p.name LIKE 'Lilliana%'


AND s.owner = p.id AND s.color <> 'white';

# unions

select id, style from shirt where color = 'blue' union select id, style from shirt where color = 'orange'

# visits per day

CREATE TABLE t1 (year YEAR(4), month INT(2) UNSIGNED ZEROFILL, day INT(2) UNSIGNED ZEROFILL); INSERT INTO t1 VALUES(2000,1,1),(2000,1,20),(2000,1,30),(2000,2,2), (2000,2,23),(2000,2,23);

SELECT year,month,BIT_COUNT(BIT_OR(1<<day)) AS days FROM t1 GROUP BY year,month;

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/164

References
Bi ging MySQL Ai-ti Aptech SQL applications Dragomir R. Radev Fall 2005 http://dev.mysql.com/doc/refman/5.5/ en/

Copyright 2004 Database Processing: Fundamentals, Design, and Implementation, 9/e by David M. Kroenke

Chapter 7/165

You might also like