72
CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak www.cs.sjsu.edu/~mak

CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Embed Size (px)

Citation preview

Page 1: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

CMPE 226

Database SystemsSeptember 30 Class Meeting

Department of Computer EngineeringSan Jose State University

Fall 2015Instructor: Ron Mak

www.cs.sjsu.edu/~mak

Page 2: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

2

Another Table Creation Example

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 3: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

3

Another Table Creation Example, cont’d

Unary relationship

unique

optional

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 4: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

4

Another Table Creation Example, cont’d

CREATE TABLE manager( managerid CHAR(4) NOT NULL, mfname VARCHAR(15) NOT NULL, mlname VARCHAR(15) NOT NULL, mbdate DATE NOT NULL, msalary NUMERIC(9,2) NOT NULL, mbonus NUMERIC(9,2), mresbuildingid CHAR(3), PRIMARY KEY (managerid));

CREATE TABLE managerphone( managerid CHAR(4) NOT NULL, mphone CHAR(11) NOT NULL, PRIMARY KEY (managerid, mphone), FOREIGN KEY (managerid) REFERENCES manager(managerid));

Bonuses are optional.

Initially optional andnot a foreign key.

Page 5: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

5

Another Table Creation Example, cont’d

CREATE TABLE building( buildingid CHAR(3) NOT NULL, bnooffloors INT NOT NULL, bmanagerid CHAR(4) NOT NULL, PRIMARY KEY (buildingid), FOREIGN KEY (bmanagerid) REFERENCES manager(managerid) );

CREATE TABLE inspector( insid CHAR(3) NOT NULL, insname VARCHAR(15) NOT NULL, PRIMARY KEY (insid));

Page 6: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

6

Another Table Creation Example, cont’dCREATE TABLE inspecting( insid CHAR(3) NOT NULL, buildingid CHAR(3) NOT NULL, datelast DATE NOT NULL, datenext DATE NOT NULL, PRIMARY KEY (insid, buildingid), FOREIGN KEY (insid) REFERENCES inspector(insid), FOREIGN KEY (buildingid) REFERENCES building(buildingid));

CREATE TABLE corpclient( ccid CHAR(4) NOT NULL, ccname VARCHAR(25) NOT NULL, ccindustry VARCHAR(25) NOT NULL, cclocation VARCHAR(25) NOT NULL, ccidreferredby CHAR(4), PRIMARY KEY (ccid), UNIQUE (ccname), FOREIGN KEY (ccidreferredby) REFERENCES corpclient(ccid));

Page 7: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

7

Another Table Creation Example, cont’d

CREATE TABLE apartment( buildingid CHAR(3) NOT NULL, aptno CHAR(5) NOT NULL, anoofbedrooms INT NOT NULL, ccid CHAR(4), PRIMARY KEY (buildingid, aptno), FOREIGN KEY (buildingid) REFERENCES building(buildingid), FOREIGN KEY (ccid) REFERENCES corpclient(ccid));

CREATE TABLE staffmember( smemberid CHAR(4) NOT NULL, smembername VARCHAR(15) NOT NULL, PRIMARY KEY (smemberid));

Page 8: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

8

Another Table Creation Example, cont’d

CREATE TABLE cleaning( buildingid CHAR(3) NOT NULL, aptno CHAR(5) NOT NULL, smemberid CHAR(4) NOT NULL, CONSTRAINT cleaningpk PRIMARY KEY (buildingid, aptno, smemberid), CONSTRAINT cleaningfk1 FOREIGN KEY (buildingid, aptno) REFERENCES apartment(buildingid, aptno), CONSTRAINT cleaningfk2 FOREIGN KEY (smemberid) REFERENCES staffmember(smemberid));

Namedconstraints

Page 9: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

9

Another Table Creation Example, cont’d

INSERT INTO manager VALUES ('M12', 'Boris', 'Grant', '20/Jun/1980', 60000, null, null);INSERT INTO manager VALUES ('M23', 'Austin', 'Lee', '30/Oct/1975', 50000, 5000, null);INSERT INTO manager VALUES ('M34', 'George', 'Sherman', '11/Jan/1976', 52000, 2000, null);

INSERT INTO managerphone VALUES ('M12','555-2222');INSERT INTO managerphone VALUES ('M12','555-3232');INSERT INTO managerphone VALUES ('M23','555-9988');INSERT INTO managerphone VALUES ('M34','555-9999');

INSERT INTO building VALUES ('B1', '5', 'M12');INSERT INTO building VALUES ('B2', '6', 'M23');INSERT INTO building VALUES ('B3', '4', 'M23');INSERT INTO building VALUES ('B4', '4', 'M34');

Page 10: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

10

Another Table Creation Example, cont’dINSERT INTO inspector VALUES ('I11', 'Jane');INSERT INTO inspector VALUES ('I22', 'Niko');INSERT INTO inspector VALUES ('I33', 'Mick');

INSERT INTO inspecting VALUES ('I11','B1','15/May/2012','14/May/2013');INSERT INTO inspecting VALUES ('I11','B2','17/Feb/2013','17/May/2013');INSERT INTO inspecting VALUES ('I22','B2','17/Feb/2013','17/May/2013');INSERT INTO inspecting VALUES ('I22','B3','11/Jan/2013','11/Jan/2014');INSERT INTO inspecting VALUES ('I33','B3','12/Jan/2013','12/Jan/2014');INSERT INTO inspecting VALUES ('I33','B4','11/Jan/2013','11/Jan/2014');

INSERT INTO corpclient VALUES ('C111', 'BlingNotes', 'Music', 'Chicago', null);INSERT INTO corpclient VALUES ('C222', 'SkyJet', 'Airline', 'Oak Park', 'C111');INSERT INTO corpclient VALUES ('C777', 'WindyCT', 'Music', 'Chicago', 'C222');INSERT INTO corpclient VALUES ('C888', 'SouthAlps', 'Sports', 'Rosemont', 'C777');

Page 11: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

11

Another Table Creation Example, cont’d

INSERT INTO apartment VALUES ('B1', '21', 1, 'C111');INSERT INTO apartment VALUES ('B1', '41', 1, null);INSERT INTO apartment VALUES ('B2', '11', 2, 'C222');INSERT INTO apartment VALUES ('B2', '31', 2, null);INSERT INTO apartment VALUES ('B3', '11', 2, 'C777');INSERT INTO apartment VALUES ('B4', '11', 2, 'C777');

INSERT INTO staffmember VALUES ('5432', 'Brian');INSERT INTO staffmember VALUES ('9876', 'Boris');INSERT INTO staffmember VALUES ('7652', 'Caroline');

INSERT INTO cleaning VALUES ('B1', '21', '5432');INSERT INTO cleaning VALUES ('B1', '41', '9876');INSERT INTO cleaning VALUES ('B2', '11', '9876');INSERT INTO cleaning VALUES ('B2', '31', '5432');INSERT INTO cleaning VALUES ('B3', '11', '5432');INSERT INTO cleaning VALUES ('B4', '11', '7652');

Page 12: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

12

Constraint ManagementALTER TABLE manager ADD CONSTRAINT fkresidesin FOREIGN KEY (mresbuildingid) REFERENCES building (buildingid);

UPDATE manager SET mresbuildingid = 'B1' WHERE managerid = 'M12';

UPDATE manager SET mresbuildingid = 'B2' WHERE managerid = 'M23';

UPDATE manager SET mresbuildingid = 'B4' WHERE managerid = 'M34';

ALTER TABLE manager MODIFY (mresbuildingid NOT NULL);

Page 13: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

13

Another Table Creation Example, cont’d

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 14: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

14

Another Table Creation Example, cont’d

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 15: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

15

Constraint Management, cont’d

DROP TABLE cleaning;DROP TABLE staffmember;DROP TABLE apartment;DROP TABLE corpclient;DROP TABLE inspecting;DROP TABLE inspector;DROP TABLE managerphone;

DROP TABLE building;DROP TABLE manager;

ALTER TABLE managerDROP CONSTRAINT fkresidesin;

Page 16: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

16

Self Join

A SELECT statement that joins a table to itself.

The table has a foreign key that refers to its own primary key.

Page 17: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

17

Self Join, cont’d

Which corporate clients were referred by other corporate clients?SELECT c.ccname AS client, r.ccname AS recommenderFROM corpclient c, corpclient rWHERE r.ccid = c.ccidreferredby;

The use of aliases is mandatory for a self join.

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 18: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

18

Inner and Outer Joins

Inner join What we’ve been doing so far.

Outer join left outer join right outer join full outer join

Page 19: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

19

Inner Join

Which apartments are rented by which corporate clients?

SELECT a.buildingid, a.aptno, c.ccnameFROM apartment a, corpclient cWHERE a.ccid = c.ccid;

Retrieve only the rows that match.

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 20: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

20

Left Outer Join

SELECT a.buildingid, a.aptno, c.ccnameFROM apartment a LEFT OUTER JOIN corpclient cON a.ccid = c.ccid;

Include all the rowson the left part of therelation (APARTMENT)whether or not there isa match.

No matches.

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 21: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

21

Right Outer Join

SELECT a.buildingid, a.aptno, c.ccnameFROM apartment a RIGHT OUTER JOIN corpclient cON a.ccid = c.ccid;

Include all the rowson the right part of therelation (CORPCLIENT)whether or not there isa match.

No match.

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 22: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

22

Full Outer Join

SELECT a.buildingid, a.aptno, c.ccnameFROM apartment a FULL OUTER JOIN corpclient cON a.ccid = c.ccid;

Include all the rowsfrom both relationswhether or not there isa match.

FULL OUTER JOINis not available withMySQL.

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 23: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

23

IS NULL

Which managers did not get a bonus?

SELECT *FROM managerWHERE mbonus IS NULL;

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 24: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

24

EXISTS

Follow WHERE EXISTS by a nested query.

The nested query is true if it retrieves any rows, else it is false.

If the nested query uses columns from the outer query, then the inner query is acorrelated subquery.

Page 25: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

25

EXISTS, cont’d

Which buildings have managers living in them?

SELECT *FROM building bWHERE EXISTS (SELECT * FROM manager m WHERE b.buildingid = m.mresbuildingid);

correlated subquery

Page 26: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

26

NOT

Which buildings do not have managers living in them?

SELECT *FROM building bWHERE NOT EXISTS (SELECT * FROM manager m WHERE b.buildingid = m.mresbuildingid);

Page 27: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

27

INSERT INTO SELECT

Use the results from a query to populate another table.

Page 28: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

28

INSERT INTO SELECT, cont’d

Create a denormalized table.

CREATE TABLE cleaningdenormalized( buildingid CHAR(3) NOT NULL, aptno CHAR(5) NOT NULL, smemberid CHAR(4) NOT NULL, smembername VARCHAR(15) NOT NULL, PRIMARY KEY (buildingid, aptno, smemberid));

INSERT INTO cleaningdenormalized SELECT c.buildingid, c.aptno, s.smemberid, s.smembername FROM cleaning c, staffmember s WHERE c.smemberid = s.smemberid;

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 29: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

29

Cascading Deletes

Normally, the referential integrity constraint prevents you from deleting a record from a table if it is referred to by a record in another table.

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 30: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

30

Cascading Deletes, cont’d

CREATE TABLE employee( empid CHAR(4), empname CHAR(20), deptid CHAR(2), PRIMARY KEY (empid), FOREIGN KEY (deptid) REFERENCES department ON DELETE CASCADE);

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 31: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

31

Cascading Deletes, cont’d

CREATE TABLE employee( empid CHAR(4), empname CHAR(20), deptid CHAR(2), PRIMARY KEY (empid), FOREIGN KEY (deptid) REFERENCES department ON DELETE SET NULL);

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 32: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

32

Cascading Updates

CREATE TABLE employee( empid CHAR(4), empname CHAR(20), deptid CHAR(2), PRIMARY KEY (empid), FOREIGN KEY (deptid) REFERENCES department ON UPDATE CASCADE);

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 33: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

33

Cascading Updates

CREATE TABLE employee( empid CHAR(4), empname CHAR(20), deptid CHAR(2), PRIMARY KEY (empid), FOREIGN KEY (deptid) REFERENCES department ON UPDATE SET NULL);

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 34: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

34

Indexing

Indexing increases the speed of retrieving table rows based on an unsorted column. Use a binary search instead of a linear search.

Linear search

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 35: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

35

Indexing (Conceptual View)

CREATE INDEX custname_index ON customer(custname);

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 36: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

36

Indexing (Conceptual View), cont’d

Binary search

Database Systemsby Jukić, Vrbsky, & NestorovPearson 2014ISBN 978-0-13-257567-6

Page 37: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

37

Indexing, cont’d

In an actual RDBMS, the index column can contain physical disk addresses.

Indexing speeds record retrieval, but it will slow record insertion, deletion, and modification.

To drop an index:

DROP INDEX custname_index;

Page 38: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

38

MySQL Text Functions

Also: One-way encryption Returns a 40-character string.

SHA1(string)

PHP and MySQL forDynamic Web Sites, 4th ed.by Larry UllmanPeachpit Press, 2012ISBN 978-0-321-78407-0

Page 39: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

39

MySQL Text Functions, cont’dmysql> select concat(first, ' ', last) -> from people;+--------------------------+| concat(first, ' ', last) |+--------------------------+| Charles Jones || Mary Adams || Susan Miller || Roger Brown || Leslie Adamson |+--------------------------+5 rows in set (0.00 sec)

mysql> select concat(first, ' ', last) as name -> from people;+----------------+| name |+----------------+| Charles Jones || Mary Adams || Susan Miller || Roger Brown || Leslie Adamson |+----------------+5 rows in set (0.00 sec)

Page 40: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

40

MySQL Numeric Functions

SELECT CONCAT('$', FORMAT(5639.6, 2))AS cost;

PHP and MySQL forDynamic Web Sites, 4th ed.by Larry UllmanPeachpit Press, 2012ISBN 978-0-321-78407-0

Page 41: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

41

MySQL Date and Time Functions

No arguments.

PHP and MySQL forDynamic Web Sites, 4th ed.by Larry UllmanPeachpit Press, 2012ISBN 978-0-321-78407-0

Page 42: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

MySQL Date and Time Functions, cont’d

42

Data types that store both a date and time:DATETIME and TIMESTAMP

Data type that stores just the date: DATE Data type that stores just the year: YEARSELECT DATE(registration_date) AS Date FROM users ORDER BYregistration_date DESC LIMIT 1;

SELECT DAYNAME(registration_date) AS Weekday FROM users ORDER BYregistration_date ASC LIMIT 1;

PHP and MySQL forDynamic Web Sites, 4th ed.by Larry UllmanPeachpit Press, 2012ISBN 978-0-321-78407-0

Page 43: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

43

Formatting the Date and TimeReturn the current date and time as Month DD, YYYY - HH:MM :

Select the email address and date registered, ordered by date registered, formatting the date as Weekday (abbreviated) Month (abbreviated) Day Year, for the last five registered users :

PHP and MySQL forDynamic Web Sites, 4th ed.by Larry UllmanPeachpit Press, 2012ISBN 978-0-321-78407-0

Page 44: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

44

Break

Page 45: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

45

PHP Input Filtering

An optional third parameter specifies either a sanitizing filter or a validation filter. Example:

A sanitizing filter strips off certain characters. A validating filter checks the input for validity.

if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo("Email is not valid");} else {    echo("Email is valid");}

Page 46: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

46

PHP Input Filtering, cont’d

Filter constant ID Description

FILTER_VALIDATE_BOOLEAN 258 Validates a boolean

FILTER_VALIDATE_EMAIL 274 Validates an e-mail address

FILTER_VALIDATE_FLOAT 259 Validates a float

FILTER_VALIDATE_INT 257 Validates an integer

FILTER_VALIDATE_IP 275 Validates an IP address

FILTER_VALIDATE_REGEXP 272 Validates a regular expression

FILTER_VALIDATE_URL 273 Validates a URL

FILTER_SANITIZE_EMAIL 517 Removes all illegal characters from an e-mail address

FILTER_SANITIZE_ENCODED 514 Removes/Encodes special characters

FILTER_SANITIZE_MAGIC_QUOTES 521 Apply addslashes()

FILTER_SANITIZE_NUMBER_FLOAT 520 Remove all characters, except digits, +- and optionally .,eE

FILTER_SANITIZE_NUMBER_INT 519 Removes all characters except digits and + -

FILTER_SANITIZE_SPECIAL_CHARS 515 Removes special characters

FILTER_SANITIZE_STRING 513 Removes tags/special characters from a string

FILTER_SANITIZE_STRIPPED 513 Alias of FILTER_SANITIZE_STRING

FILTER_SANITIZE_URL 518 Removes all illegal character from s URL

FILTER_UNSAFE_RAW 516 Do nothing, optionally strip/encode special characters

FILTER_CALLBACK 1024 Call a user-defined function to filter data

Default

http://www.w3schools.com/php/php_ref_filter.asp

Page 47: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

47

PHP is Object-Oriented

The object-oriented features and syntaxof PHP resemble those of Java:

classes and objects abstract classes inheritance interfaces

PHP also has traits. Add functionality to a class without inheritance.

Page 48: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

48

PHP Classes

class Pet { public $name; function __construct($pet_name) { $this->name = $pet_name; } function eat() { /* ... */ } function sleep() { /* ... */ } function play() { /* ... */ }}

The constructoris always named__construct(two underscores).0

oo/Pet.php

Page 49: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

49

PHP Inheritance

class Cat extends Pet { function play() { parent::play(); }}

Scope resolutionoperator ::

As with Java, a PHP class can inherit from at most one superclass.

oo/Pet.php

Page 50: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

50

PHP Objects

$cat = new Cat('Eliza');$pet = new Pet('Norska');

$cat->eat();$pet->sleep();

// Delete the objectsunset($cat, $pet);

oo/Pet.php

Page 51: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

51

PHP Abstract Classes

abstract class Shape { abstract protected function getArea(); abstract protected function getPerimeter();}

class Triangle extends Shape { private $_sides = array(); private $_perimeter = NULL;

function __construct($s0 = 0, $s1 = 0, $s2 = 0) { /* ... */ } public function getArea() { /* ... */ } public function getPerimeter() { /* ... */ }}

oo/Shape.php

oo/Triangle.php

Page 52: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

52

PHP Interfaces

interface Crud { public function create($data); public function read(); public function update($data); public function delete();}

class User implements Crud { /* ... */ function create($data) { /* ... */ } function read() { /* ... */ } function update($data) { /* ... */ } public function delete() { /* ... */ }}

oo/Crud.php

oo/Crud.php

Page 53: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

53

PHP Traits

Traits add functionality to a class without class inheritance. They help overcome some of the

restrictions of single inheritance.

A class can use several traits. Several classes can share traits.

Page 54: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

54

PHP Traits, cont’dtrait Debug { public function dumpObject() { $class = get_class($this); $attributes = get_object_vars($this); $methods = get_class_methods($this); echo "<h2>Information about the $class object</h2>"; echo '<h3>Attributes</h3><ul>'; foreach ($attributes as $k => $v) { echo "<li>$k: $v</li>"; } echo '</li></ul>'; echo '<h3>Methods</h3><ul>'; foreach ($methods as $v) { echo "<li>$v</li>"; } echo '</li></ul>'; }}

oo/Debug.php

Page 55: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

55

PHP Traits, cont’d

class Rectangle { use Debug;

/ ... */}

require('Debug.php');require('Rectangle.php');

$r = new Rectangle(42, 37);$r->dumpObject();

oo/Rectangle.php

oo/traittest.php

Page 56: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

56

Object-Relational Mapping (ORM)

Object-relational mapping (ORM) is aset of techniques to overcome the mismatch between objects and relational data.

objects: PHP data relational data: database query results

PHP Data Object (PDO) can fetch data from database tables in the form of objects.

Page 57: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

57

Object-Relational Mapping (ORM), cont’d

class Person{ private $id; private $first; private $last; private $gender; private $salary; public function getId() { return $this->id; } public function getFirst() { return $this->first; } public function getLast() { return $this->last; } public function getGender() { return $this->gender; } public function getSalary() { return $this->salary; }}

Page 58: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

58

Object-Relational Mapping (ORM), cont’d$ps = $con->prepare($query);

...

// Fetch the matching database table rows.$ps->execute();$ps->setFetchMode(PDO::FETCH_CLASS, "Person");

// Construct the HTML table row by row.while ($person = $ps->fetch()) { print " <tr>\n"; print " <td>" . $person->getId() . "</td>\n"; print " <td>" . $person->getFirst() . "</td>\n"; print " <td>" . $person->getLast() . "</td>\n"; print " <td>" . $person->getGender() . "</td>\n"; print " <td>" . $person->getSalary() . "</td>\n"; print " </tr>\n";}

Demo

Page 59: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

59

Type Hinting

If you’ve defined a PHP class, you can “hint” the class type in a function header.

PHP will generate a fatal error if you pass a value with a type that doesn’t match the type hint.

You cannot hint simple types such as integer or string.

Page 60: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

60

Type Hinting, cont’d

function createTableRow(Person $p){ print " <tr>\n"; print " <td>" . $p->getId() . "</td>\n"; print " <td>" . $p->getFirst() . "</td>\n"; print " <td>" . $p->getLast() . "</td>\n"; print " <td>" . $p->getGender() . "</td>\n"; print " <td>" . $p->getSalary() . "</td>\n"; print " </tr>\n";}

// Construct the HTML table row by row.while ($person = $ps->fetch()) { print " <tr>\n"; createTableRow($person); print " </tr>\n";}

Demo

Page 61: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

61

Namespaces

A PHP namespace is similar to a Java package.

Separate nested namespace names with \ instead of .

By convention, namespace names are also source directory names.

namespace Shapes\Simple;

class Rectangle …class Square …class Circle …

require('Shapes/Simple/Circle.php');…new Shapes\Simple\Circle(…);

require('Shapes/Simple/Circle.php');use Shapes\Simple…new Circle(…);

Page 62: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

62

Assignment #5

Build upon Assignment #4.

Use object-oriented PHP and object-relational mapping to retrievedata from the database as objects.

Due Wednesday, October 14.

Page 63: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

63

PHP Error Reporting

Run phpInfo() and check that flag display_errors is on during development.

Set in the PHP configuration file XAMPP/xamppfiles/etc/php.ini

Set at run time:

0: off 1: on

ini_set('display_errors', 1);

display_errors=On

Page 64: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

64

PHP Error Reporting, cont’d

<body> <h1>Display Errors</h1> <?php ini_set('display_errors', 1); // Create errors foreach ($var as $v) {} $result = 1/0; ?></body>

Demo

errors/display.php

Page 65: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

65

PHP Error Reporting, cont’d

Set the error-reporting level.

<body> <h1>Error Levels</h1> <?php ini_set('display_errors', 1); // Adjust error reporting error_reporting(E_ALL | E_STRICT); // Create errors foreach ($var as $v) {} $result = 1/0; ?></body>

errors/levels.php

Demo

Page 66: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

66

PHP Error Reporting, cont’d

Value Constant Description1 E_ERROR Fatal run-time errors. Errors that cannot be recovered from. Execution of the script is halted2 E_WARNING Run-time warnings (non-fatal errors). Execution of the script is not halted4 E_PARSE Compile-time parse errors. Parse errors should only be generated by the parser

8 E_NOTICE Run-time notices. The script found something that might be an error, but could also happen when running a script normally

16 E_CORE_ERROR Fatal errors at PHP startup. This is like E_ERROR, except it is generated by the core of PHP32 E_CORE_WARNING Non-fatal errors at PHP startup. This is like E_WARNING, except it is generated by the core of PHP64 E_COMPILE_ERROR Fatal compile-time errors. This is like E_ERROR, except it is generated by by the Zend Scripting Engine

128 E_COMPILE_WARNING Non-fatal compile-time errors. This is like E_WARNING, except it is generated by by the Zend Scripting Engine

256 E_USER_ERROR Fatal user-generated error. This is like E_ERROR, except it is generated in PHP code by using the PHP function trigger_error()

512 E_USER_WARNING Non-fatal user-generated warning. This is like E_WARNING, except it is generated in PHP code by using the PHP function trigger_error()

1024 E_USER_NOTICE User-generated notice. This is like E_NOTICE, except it is generated in PHP code by using the PHP function trigger_error()

2048 E_STRICT Enable to have PHP suggest changes to your code which will ensure the best interoperability and forward compatibility of your code (Since PHP 5 but not included in E_ALL until PHP 5.4)

4096 E_RECOVERABLE_ERRORCatchable fatal error. Indicates that a probably dangerous error occurred, but did not leave the Engine in an unstable state. If the error is not caught by a user defined handle, the application aborts as it was an E_ERROR (Since PHP 5.2)

8192 E_DEPRECATED Run-time notices. Enable this to receive warnings about code that will not work in future versions (Since PHP 5.3)

16384 E_USER_DEPRECATED User-generated warning message. This is like E_DEPRECATED, except it is generated in PHP code by using the PHP function trigger_error() (Since PHP 5.3)

32767 E_ALL Enable all PHP errors and warnings (except E_STRICT in versions < 5.4)

http://www.w3schools.com/php/php_ref_error.asp

Page 67: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

67

PHP Error Suppression

Suppress individual errors with @

Example: Don’t report a missing file error:

Example: Don’t report a division by zero:

@include 'testbedstart.inc.php';

$result = @(1/0);

Demo

errors/suppress.php

Page 68: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

68

Custom PHP Error Handler

Write a custom error handler with the signature:

Then tell PHP to use it:

functionName($level, $message, $file, $line, $context)

set_error_handler ('functionName');

Page 69: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

69

Custom PHP Error Handler, cont’d

define('LIVE', FALSE); function myErrorHandler ($number, $message, $file, $line, $vars) { $message = "<hr /><strong>An error occurred in file '$file' " . "on line $line: $message</strong>\n<pre>\n" . print_r($vars, 1) . "</pre>"; if (!LIVE) { echo "$message\n"; echo "<br /><strong>Backtrace:</strong><br />\n"; debug_print_backtrace(); echo "<hr />"; } else { echo '<div class="error">'. ' A system error occurred. ' . ' We apologize for the inconvenience.' . '</div><br />'; }} set_error_handler ('myErrorHandler'); Demo

errors/custom.php

Page 70: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

70

Midterm Preparation

Open book, open laptops, open Internet. No communication with anyone else. One hour + 15 minutes.

Key ideas behind databases in generaland relational databases in particular

Basic HTML and PHP

PHP connection to a MySQL database via PDO

Page 71: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

71

Midterm Preparation, cont’d

Data models: conceptual, logical, and physical

Relational database model entity-relationship diagrams mapping ER diagrams to relational models constraints

Normalization functional dependencies

Page 72: CMPE 226 Database Systems September 30 Class Meeting Department of Computer Engineering San Jose State University Fall 2015 Instructor: Ron Mak mak

Computer Engineering Dept.Fall 2015: September 30

CMPE 226: Database Systems© R. Mak

72

Midterm Preparation, cont’d

SQL selection, projection, and join operations PHP prepared statements constraint management

Object-relational mapping object-oriented PHP