mysql rab2-student

48
Web Applications Web Applications Development Development Lecture 1 Lecture 1 My SQL My SQL Robin Robin Boswell Boswell

Upload: santosh-mishra

Post on 28-Jun-2015

220 views

Category:

Technology


0 download

TRANSCRIPT

Page 1: Mysql rab2-student

Web Applications Web Applications DevelopmentDevelopment

Lecture 1Lecture 1

My SQLMy SQL

Robin Robin BoswellBoswell

Page 2: Mysql rab2-student

Contents

• What is MySQL?– Comparison with Access

• Running MySQL in the labs• SQL

– Data Definition language• Creating tables• Data types

– Data manipulation language• Select, Insert, …

– This is mostly revision of CM2020

Page 3: Mysql rab2-student

MySQL• A popular OpenSource SQL Database

management system• > 10 million installations• Developed and supported by MySQL AB

– www.mysql.com

• Emphasis on fast query processing• Early versions lacked essential features

– Views, procedural code, support for relational integrity

– These are all present in version 5.0 onwards

Page 4: Mysql rab2-student

Comparison with Access

Access• GUI: QBE, Simple table

creation, “drag & drop” forms,…

• Windows only

• Non-standard SQL

• Not particularly fast

MySQL• Command line interface

• Available on Windows, Linux, Macintosh…

• ANSI SQL

• Fast

Page 5: Mysql rab2-student

Getting started: connecting to the server

mysql –u 0123435 –h scomp-wasp –D012345 -p

UserId DatabaseHostname

Page 6: Mysql rab2-student
Page 7: Mysql rab2-student

Initial commands

• show database; # list available databases• use databasename;

– E.g. use 0123456;• show tables;• exit

Page 8: Mysql rab2-student

SQL

• Data definition language– Creating tables

• Data manipulation language– Reading, writing and updating tables

Page 9: Mysql rab2-student

Data Definition commands

Page 10: Mysql rab2-student

Creating Tables

CREATE TABLE pet (name VARCHAR(20),owner VARCHAR(20),species VARCHAR(20),sex CHAR(1),birth DATE,death DATE);

Page 11: Mysql rab2-student

Data TypesSee chapter 10 of the manual for more details on data types

Strings

• CHAR(N), VARCHAR(N)– CHARs are padded to length N– VARCHARs are variable length N

• BLOB– Large binary files, e.g. images

• TEXT(N)– TINYTEXT TEXT MEDIUMTEXT LONGTEXT– Long text strings, e.g. text typed by user into box

Page 12: Mysql rab2-student

Another String type: Enum

CREATE TABLE Driver (

Title ENUM (‘Mr’, ‘Mrs’, ‘Ms’),DriverID CHAR(6),Name VARCHAR(20),Points INT

);

Data Types

Page 13: Mysql rab2-student

DATE, DATETIMECREATE TABLE Driver (

Title ENUM (‘Mr’, ‘Mrs’, ‘Ms’),DriverID CHAR(6),DateOfBirth DATE, -- YYYY-MM-DD, e.g. ‘1959-07-04’Name VARCHAR(20),

);

CREATE TABLE Order (OrderID CHAR(8),ProductID CHAR(8)Number INTDate DATETIME -- YYYY-MM-DD HH-MM-SS

-- e.g. ‘2007-09-30 09-30-15’);

Data Types

Page 14: Mysql rab2-student

Data TypesNumeric• INT

– Integers• FLOAT, DOUBLE

– Floating point numbers– N.B. These are approximate values

• DECIMAL(P, S) # Precision, Scale– Exact values– Example:

Suppose cost 5000, e.g., cost = 3289.75 Appropriate data-type for cost is:

cost DECIMAL(6, 2)

Page 15: Mysql rab2-student

Constraints

Table definitions can include Constraints

Constraints implement Data Integrity

Recall: • Data Integrity ensures data is correct

Page 16: Mysql rab2-student

Column Constraints

Primary keys can be implemented as column constraints

CREATE TABLE Driver (

Title ENUM (‘Mr’, ‘Mrs’, ‘Ms’),DriverID CHAR(6) PRIMARY KEY,Name VARCHAR(20)

);

MySQL implements primary key integrity

Page 17: Mysql rab2-student

Table constraints

CREATE TABLE Driver (

Title ENUM (‘Mr’, ‘Mrs’, ‘Ms’),DriverID CHAR(6),CONSTRAINT pkdriv PRIMARY KEY DriverID);

CREATE TABLE Grades (StudentID CHAR(10),ModuleID CHAR(7),Grade CHAR(1),CONSTRAINT pkgrade PRIMARY KEY (StudentID, ModuleID)

);

A composite primary key must be declared as a table constraint, not as part of a column definition.

Page 18: Mysql rab2-student

Foreign Keys

Staff

StaffCode StaffName Dept*S001 Taylor D003S002 Gibbon D003S003 Russell D002

Department

DCode DNameD001 ClassicsD002 PhilosophyD003 HistoryD004 Economics

Page 19: Mysql rab2-student

Declaring Foreign Keys

CREATE TABLE Staff (Staffcode CHAR(4),StaffName VARCHAR(20),Dept CHAR(4) REFERENCES Department(Deptcode)

);

CREATE TABLE Department (Deptcode CHAR(4),Deptname VARCHAR(20),CONSTRAINT dep_con1 PRIMARY KEY (Deptcode)

);

CREATE TABLE Staff2 (-- An alternative way of declaring a FKStaffcode CHAR(4),StaffName VARCHAR(20),Dept CHAR(4),FOREIGN KEY (Dept) REFERENCES Department

);

Optional, if it’s the primary key

Can be multiple valued, to match composite primary key

Page 20: Mysql rab2-student

Referential Integrity

Staff

StaffCode StaffName Dept*S001 Taylor D003S002 Gibbon D003S003 Russell D002S004 Penman D005

Department

DCode DNameD001 ClassicsD002 PhilosophyD003 HistoryD004 Economics

Referential integrity means that for every value of the foreign key there must be a matching value in the table it links to.

Page 21: Mysql rab2-student

Integrity constraints in MySQL

MySQL 5.0 implements primary key integrity and referential integrity on foreign keys.

MySQL 5.0 doesn’t implement any other forms of integrity checking

CREATE TABLE Driver (Title ENUM (‘Mr’, ‘Mrs’, ‘Ms’),DriverID CHAR(6) PRIMARY KEY,Name VARCHAR(20),Points INT check (Points < 8)

);This will be

ignored

Page 22: Mysql rab2-student

Properties of FK links

Staff

StaffCode StaffName Dept*S1 Fred D1S2 Bill D1S3 Jim D2

Department

DCode DNameD1 ArtD2 ComputingD3 Business

What happens to the Staff table if the Art department is closed, or changes its DCode?

Page 23: Mysql rab2-student

Link Properties: On Delete, On Update

DID Name D1 Art D2 Computing

DeptSID Name S1 Fred S2 Bill S3 Jim

Staff

DID*D1D1D2

On delete: Cascade

NULL

On delete: Set Default

On delete: Set Null

Link properties

Page 24: Mysql rab2-student

DID Name D1 Art D2 Computing

DeptSID Name S1 Fred S2 Bill S3 Jim

Staff

DID*D1D1D2

On update: Cascade

NULL

On delete: Set Default

On update: Set Null

D42D42D42 D0x79fc

Link properties

Link Properties: On Delete, On Update

Page 25: Mysql rab2-student

Setting link properties in SQL

CREATE TABLE Department (Deptcode CHAR(4),Deptname VARCHAR(20),CONSTRAINT dep_con1 PRIMARY KEY (Deptcode)

);

CREATE TABLE Staff (Staffcode CHAR(4),StaffName VARCHAR(20),Dept CHAR(4)

FOREIGN KEY (Dept) REFERENCES DepartmentON DELETE SET NULLON UPDATE SET NULL

);

Page 26: Mysql rab2-student

Data Manipulation commands• SELECT• INSERT• APPEND• DELETE

Page 27: Mysql rab2-student

27

The Select Command

SELECT <field list>FROM <table list>WHERE <condition>;

SELECT *FROM MarksWHERE Name = ‘Bloggs’ OR Name = ‘Donald’

Bloggs 50 67 90 62 Donald 46 50 89 67

Pick columns

Pick rows

Name RDB Java Business Intranet

Absolom 45 80 87 60Bloggs 50 67 90 62Carver 55 56 91 63 Donald 46 50 89 67

Marks

Pick tables

Page 28: Mysql rab2-student

28

The Select Command

Name RDB Java Business Intranet

Absolom 45 80 87 60Bloggs 50 67 90 62Carver 55 56 91 63Donald 46 50 89 67

Marks

SELECT Name, JavaFROM Marks;

Absolom 80Bloggs 67 Carver 56 Donald 50

SELECT <field list>FROM <table list>WHERE <condition>;

Pick columns

Pick rows

Pick tables

Page 29: Mysql rab2-student

29

The Select Command

SELECT Name, JavaFROM MarksWHERE Name = ‘Carver’;

Carver 56

Name RDB Java Business Intranet

Absolom 45 80 87 60Bloggs 50 67 90 62Carver 55 56 91 63Donald 46 50 89 67

Marks

SELECT <field list>FROM <table list>WHERE <condition>;

Pick columns

Pick rows

Pick tables

Page 30: Mysql rab2-student

Regular Expressions – Pattern Matching

SELECT *FROM DriverWHERE PostCode like ‘AB%’

selects drivers whose post-code starts “AB…”

% represents any number of characters_ represents exactly one character

Use the operators LIKE or REGEXP in the WHERE field of SELECT

LIKE is standard SQL (See manual section 3.3.4.7)REGEXP is an extra feature provided by My SQL (11.4.1)

LIKE

Page 31: Mysql rab2-student

Inserting, Modifying and Deleting Data

• Insert – Load a record at a time

• Load – Import a table from a file

• Update – Change the value of a field

• Delete - Delete one or more records

Page 32: Mysql rab2-student

INSERT

CREATE TABLE Driver (

Title ENUM (‘Mr’, ‘Mrs’, ‘Ms’),DriverID CHAR(6) PRIMARY KEY,Name VARCHAR(20)

);

INSERT INTO DRIVER VALUES -- A complete row(‘Mr’, ‘D00123’, ‘Smith’);

INSERT INTO DRIVER (DriverID, Name) VALUES-- Specified values(‘D00124’, ‘Jones’);

Page 33: Mysql rab2-student

LOAD

CREATE TABLE Driver (

DriverID CHAR(6) PRIMARY KEY,

Title ENUM (‘Mr’, ‘Mrs’, ‘Ms’),Name VARCHAR(20)

);

LOAD DATA LOCAL INFILE ‘driver.txt’ -- Tab-separated fieldsINTO TABLE Driver ;

File stored on client

Load is similar to the “import table” feature in Access

See section 12.2.5 for more details

D00001 Mr BoggisD00002 Mrs BoggisD00003 Mr ErnieD00004 Ms Tracy

Page 34: Mysql rab2-student

Update

UPDATE TABLESET …WHERE…

Example-- From now on , all male drivers will be-- called BoggisUPDATE Driver

SET Name = ‘Boggis’WHERE Title = ‘Mr’;

Page 35: Mysql rab2-student

Delete

DELETE FROM TABLEWHERE…

Example

-- Delete all male drivers

DELETE FROM DriverWHERE Title = ‘Mr’;

Page 36: Mysql rab2-student

Selecting from multiple tables

Page 37: Mysql rab2-student

38

Cartesian Product in SQL

MC1 Roast BeefMC2 Roast LambMC3 Chicken Tikka

P1 Ice CreamP2 Apple Crumble

Main Pudding

SELECT *FROM Main, Pudding;

MC1 Roast Beef P1 Ice CreamMC1 Roast Beef P2 Apple CrumbleMC1 Roast Lamb P1 Ice CreamMC2 Roast Lamb P2 Apple CrumbleMC3 Chicken Tikka P1 Ice CreamMC3 Chicken Tikka P2 Apple Crumble

Page 38: Mysql rab2-student

39

Inner Join in My SQL

ID p_nameP1 AramisP2 AthenaP3 Oracle

ProjID s_name Prj#*S1 Jones P1S2 Carey P1S3 Fuller P2S4 Mack P2

Staff

SELECT *FROM Staff, ProjWHERE Staff.Prj# =

Staff.ID s_name Staff.Prj# Proj.ID p_name S1 Jones P1 P1Aramis S2 Carey P1 P1 Aramis S3 Fuller P2 P2 Athena S4 Mack P2 P2 Athena

Proj.ID;

SELECT *FROM Staff INNER JOIN ProjON Staff.Prj# = Proj.ID;

These two statements are equivalent

Page 39: Mysql rab2-student

40

Natural Join in SQL

ID p_nameP1 AramisP2 AthenaP3 Oracle

ProjID s_name Prj#*S1 Jones P1S2 Carey P1S3 Fuller P2S4 Mack P2

Staff

SELECT Staff.ID, s_name, Staff.Prj#, p_nameFROM Staff, ProjWHERE Staff.Prj# = Proj.ID

Staff.ID s_name Staff.Prj# p_name S1 Jones P1 Aramis S2 Carey P1 Aramis S3 Fuller P2 Athena S4 Mack P2 Athena

Page 40: Mysql rab2-student

41

Outer Joins

ID p_nameP1 AramisP2 AthenaP3 Oracle

Proj

ID s_name Prj#*S1 Jones P1S2 Carey P1S3 Fuller P2S4 Mack P2

Staff

Inner and Natural joins return only those rows which match on a given field

Outer Join also returns rows from one table which have no match in the other table;

SELECT * FROM Staff RIGHT JOIN Proj ON Staff.Prj# = Proj.ID;

Staff.ID s_name Staff.Prj# Proj.ID p_name S1 Jones P1 P1Aramis S2 Carey P1 P1 Aramis S3 Fuller P2 P2 Athena S4 Mack P2 P2 Athena NULL NULL NULL P3 Oracle

Page 41: Mysql rab2-student

Other features of the Select command

Ordering and Grouping

Page 42: Mysql rab2-student

43

OrderingLoan table:

Loan# catno Memno LoanDate DueDate Fine

L0002 B0001 M0001 05/10/97 04/12/97 £62.10

L0003 B0002 M0001 05/12/97 05/03/98 £53.00

L0004 B0003 M0001 05/12/97 05/03/98 £53.00

L0006 B0004 M0002 13/12/97 13/03/98 £52.20

L0008 B0000 M0002 16/01/98 16/04/98 £48.80

L0009 B0005 M0003 18/08/99 18/11/99 £75.00

SELECT Loan#, catno FROM LoanORDER BY catno;

Loan# Catno

L0008 B0000

L0002 B0001

L0003 B0002

L0004 B0003

L0006 B0004

L0009 B0005

Page 43: Mysql rab2-student

44

Ordering on > 1 fieldLoan table:

Loan# catno Memno LoanDate DueDate Fine

L0002 B0001 M0001 05/10/97 04/12/97 £62.10

L0003 B0002 M0001 05/12/97 05/03/98 £53.00

L0004 B0003 M0001 05/12/97 05/03/98 £53.00

L0006 B0004 M0002 13/12/97 13/03/98 £52.20

L0008 B0000 M0002 16/01/98 16/04/98 £48.80

L0009 B0005 M0003 18/08/99 18/11/99 £75.00

SELECT Memno, Fine FROM LoanORDER BY Memno, Fine;

Memno Fine

M0001 £53.00

M0001 £53.00

M0001 £62.10

M0002 £48.80

M0002 £52.20

M0003 £75.00

SELECT Memno, Fine FROM LoanORDER BY Memno, Fine DESC;

Memno Fine

M0001 £62.10

M0001 £53.00

M0001 £53.00

M0002 £52.20

M0002 £48.80

M0003 £75.00

Page 44: Mysql rab2-student

Aggregate Operators

• COUNT counts records

• SUM adds values

• AVG calculates average value

Page 45: Mysql rab2-student

46

Grouping

SELECT memno, COUNT(*) AS num_loans FROM Loan;

Loan# Book# Memno L0002 B0001 M0001

L0003 B0002 M0001

L0004 B0003 M0001

L0006 B0004 M0002

L0008 B0000 M0002

How many loans does each member have?

Memno num_loans M0001 5 M0001 5 M0001 5 M0002 5 M0002 5

Page 46: Mysql rab2-student

47

Grouping

SELECT memno, COUNT(*) AS num_loans FROM Loan

Loan# Book# Memno L0002 B0001 M0001

L0003 B0002 M0001

L0004 B0003 M0001

L0006 B0004 M0002

L0008 B0000 M0002

Memno num_loans M0001 3 M0002 2

One entry in results table for each different value of memno

Aggregates are evaluated separately for each group

How many loans does each member have?

GROUP BY memno;

Page 47: Mysql rab2-student

More Grouping

memno catno fine

M0001 B0002 £53.00

M0001 B0003 £53.00

M0002 B0004 £52.20

M0003 B0005 £75.00

SELECT memno, SUM(fine) AS total_fine FROM LoanGROUP BY memno ;

memno total_fineM0001 £106.00M0002 £52.20M0003 £75.00

What is the total fine paid by each member?

Page 48: Mysql rab2-student

SQL Summary

• Data definition language– Creating tables– Setting data types– Defining constraints

• Data manipulation language– Reading, writing and updating records in

tables

For more details, see the MySQL manual