WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Relational Databases
and MySQL
Charles Severance
www.wa4e.com
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
OLD Sequential NEW
Master
Sorte Sorte
Update
d 1970s d
Merg
e
Transacti
ons
Sorted https://en.wikipedia.org/wiki/IBM_729
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Random
Access
• When you can randomly
access data...
• How can you lay out data
to be most efficient?
• Sorting might not be the
best idea
https://en.wikipedia.org/wiki/Hard_disk_drive_platter
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Relational Databases
Relational databases model data by
storing rows and columns in tables.
The power of the relational
database lies in its ability to
efficiently retrieve data from those
tables - in particular, where the
query involves multiple tables and
the relationships between those
tables.
http://en.wikipedia.org/wiki/Relational_database
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Structured Query Language
• Structured Query
Language (SQL) came
out of a government /
industry partnership
• National Institute of
Standards and
Technology (NIST)
https://youtu.be/rLUm3vst87g
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
SQL
Structured Query Language is
the language we use to issue
commands to the database
- Create/Insert data
- Read/Select some data
- Update data
- Delete data http://en.wikipedia.org/wiki/SQL
https://en.wikipedia.org/wiki/ANSI-SPARC_Architecture
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Terminology
• Database - contains one or more tables
• Relation (or table) - contains tuples and attributes
• Tuple (or row) - a set of fields which generally
represent an “object” like a person or a music track
• Attribute (also column or field) - one of possibly many
elements of data corresponding to the object
represented by the row
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
A relation is defined as a set of tuples that have the same attributes. A tuple
usually represents an object and information about that object. Objects are
typically physical objects or concepts. A relation is usually described as a
table, which is organized into rows and columns. All the data referenced by an
attribute are in the same domain and conform to the same constraints.
(wikipedia)
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Columns / Attributes
Rows /
Tuples
Tables / Relations
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Common Database Systems
• Three major Database Management Systems in wide use
- Oracle - Large, commercial, enterprise-scale, very tweakable
- MySQL - Simpler but very fast and scalable - commercial
open source
- SqlServer - Very nice - from Microsoft (also Access)
• Many other smaller projects, free and open source
- HSQL, SQLite, PostgreSQL ...
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Basic SQL Operations
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Time Browser Web Server Database Server
D
Apache
O Parse
static MySql
files
M Request
Parse
Response
PHP php
code
JavaScri
pt
RRC/HTTP SQL
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Using SQL
phpMyAdmin SQL
(Browser)
User Database
D.B.A. Server
mysql MySQL
(Command SQL
Line)
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Command Line
After Control Panel is running...
•Macintosh
- /Applications/MAMP/Library/bin/mysql --host=localhost -uroot –p
- Enter "root" when prompted for the password
•Windows
- c:\xampp\mysql\bin\mysql.exe -u root –p
- Press enter when prompted for password
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Your First MySQL Command
show databases
Kind of like print('hello world’)
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
If this does not work,
stop and figure out
why.
Some of these are part
of MySQL and store
internal data - don't
mess with them.
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Creating a Database
Command Line:
CREATE DATABASE People;
USE People;
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Start Simple - A Single Table
• Let’s make a table of Users in our People database
• Two columns - name and email
CREATE TABLE Users(
name VARCHAR(128),
email VARCHAR(128)
);
DESCRIBE Users;
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
SQL: Insert
The INSERT statement inserts a row
into a table
INSERT INTO Users (name, email) VALUES ('Chuck', '[email protected]') ;
INSERT INTO Users (name, email) VALUES ('Somesh', '
[email protected]') ;
INSERT INTO Users (name, email) VALUES ('Caitlin', '
[email protected]') ;
INSERT INTO Users (name, email) VALUES ('Ted', '
[email protected]') ;
INSERT INTO Users (name, email) VALUES ('Sally', '
[email protected]') ;
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
SQL: Delete
Deletes a row in a table based on selection
criteria
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
SQL: Update
Allows the updating of a field with a WHERE
clause
UPDATE Users SET name='Charles' WHERE email='[email protected]'
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Retrieving Records: Select
Retrieves a group of records - you can either retrieve
all the records or a subset of the records with a
WHERE clause
SELECT * FROM Users
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Sorting with ORDER BY
You can add an ORDER BY clause to SELECT
statements to get the results sorted in ascending
or descending order
SELECT * FROM Users ORDER BY email
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
The LIKE Clause
We can do wildcard matching in a
WHERE clause using the LIKE operator
SELECT * FROM Users WHERE name LIKE '%e%'
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
The LIMIT Clause
• The LIMIT clause can request the first "n" rows, or the first "n" rows
after some starting row. Note: the first row is zero, not one.
• WHERE and ORDER BY clauses happen *before* the LIMIT is applied.
• The limit can be a count or a starting row and count (starts from 0).
SELECT * FROM Users ORDER BY email DESC LIMIT 2;
SELECT * FROM Users ORDER BY email LIMIT 1,2;
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Counting Rows with SELECT
You can request to receive the count of
the rows that would be retrieved instead
of the rows
SELECT COUNT(*) FROM Users;
SELECT COUNT(*) FROM Users WHERE email='
[email protected]'
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
SQL Summary
INSERT INTO Users (name, email) VALUES ('Ted', '[email protected]')
UPDATE Users SET name='Charles' WHERE email='[email protected]'
SELECT * FROM Users ORDER BY email
SELECT * FROM Users WHERE name LIKE '%e%'
SELECT * FROM Users ORDER BY email LIMIT 1,2;
SELECT COUNT(*) FROM Users WHERE email='[email protected]'
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
This is not too exciting (so
far)
• Tables pretty much look like big, fast programmable
spreadsheets with rows, columns, and commands.
• The power comes when we have more than one table
and we can exploit the relationships between the tables.
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Data Types in SQL
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Looking at Data Types
• Text fields (small and large)
• Binary fields (small and large)
• Numeric fields
• AUTO_INCREMENT fields
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
String Fields
• Understand character sets and are indexable for
searching
• CHAR allocates the entire space (faster for small strings
where length is known)
• VARCHAR allocates a variable amount of space
depending on the data length (less space)
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Text Fields
• Have a character set - paragraphs or HTML pages
- TINYTEXT up to 255 characters
- TEXT up to 65K
- MEDIUMTEXT up to 16M
- LONGTEXT up to 4G
• Generally not used with indexing or sorting - and only
then limited to a prefix
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Binary Types (rarely used)
• Character = 8 - 32 bits of information depending on
character set
• Byte = 8 bits of information
- BYTE(n) up to 255 bytes
- VARBINARY(n) up to 65K bytes
• Small Images - data
• Not indexed or sorted
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Binary Large Object
(BLOB)
• Large raw data, files, images, word documents, PDFs,
movies, etc.
• No translation, indexing, or character set
- TINYBLOB(n) - up to 255
- BLOB(n) - up to 65K
- MEDIUMBLOB(n) - up to 16M
- LONGBLOB(n) - up to 4G
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Integer Numbers
Integer numbers are very efficient, take little storage, and
are easy to process because CPUs can often compare them
with a single instruction.
- TINYINT (-128, 128)
- SMALLINT (-32768, +32768)
- INT or INTEGER (2 Billion)
- BIGINT - (10**18 ish)
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Floating Point Numbers
Floating point numbers can represent a wide range of
values, but accuracy is limited.
- FLOAT (32-bit) 10**38 with seven digits of accuracy
- DOUBLE (64-bit) 10**308 with 14 digits of accuracy
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Dates
• TIMESTAMP - 'YYYY-MM-DD HH:MM:SS' (1970,
2037)
• DATETIME - 'YYYY-MM-DD HH:MM:SS'
• DATE - 'YYYY-MM-DD'
• TIME - 'HH:MM:SS'
• Built-in MySQL function NOW()
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Database Keys and Indexes
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
AUTO_INCREMENT
Often as we make DROP TABLE Users;
multiple tables and need
to JOIN them together we CREATE TABLE Users (
need an integer primary user_id INT UNSIGNED NOT NULL
key for each row so we AUTO_INCREMENT,
name VARCHAR(128),
can efficiently add a
email VARCHAR(128),
reference to a row in PRIMARY KEY(user_id),
some other table as a INDEX(email)
foreign key. )
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
MySQL Functions
Many operations in MySQL need to use the built-in
functions (like NOW() for dates).
• http://dev.mysql.com/doc/refman/5.0/en/string-
functions.html
• http://dev.mysql.com/doc/refman/5.0/en/date-and-time-
functions.html
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Indexes
• As a table gets large (they always do), scanning all the
data to find a single row becomes very costly
must find my password amongst 500 million users
• There are techniques to greatly shorten the scan as long
as you create data structures and maintain those
structures - like shortcuts
• Hashes or Trees
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
MySQL Index Types
• PRIMARY KEY - Very little space, exact match, requires
no duplicates, extremely fast for integer fields
• INDEX - Good for individual row lookup and sorting /
grouping results - works best with exact matches or
prefix lookups - can suggest HASH or BTREE
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
B-Trees
A B-tree is a tree data structure that keeps data sorted
and allows searches, sequential access, insertions, and
deletions in logarithmic amortized time. The B-tree is
optimized for systems that read and write large blocks of
data. It is commonly used in databases and file systems.
http://en.wikipedia.org/wiki/B-tree
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Hashes
A hash function is any algorithm or
subroutine that maps large data sets to
smaller data sets, called keys. For
example, a single integer can serve as
an index to an array (cf. associative
array). The values returned by a hash
function are called hash values, hash
codes, hash sums, checksums, or
simply hashes.
Hash functions are mostly used to
accelerate table lookup or data
comparison tasks such as finding items
in a database... http://en.wikipedia.org/wiki/Hash_function
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Specifying DROP TABLE Users;
Indexes CREATE TABLE Users (
user_id INT UNSIGNED NOT NULL
AUTO_INCREMENT,
name VARCHAR(128),
email VARCHAR(128),
PRIMARY KEY(user_id),
INDEX(email)
)
ALTER TABLE Users ADD INDEX ( email ) USING BTREE
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Summary
• SQL allows us to describe the shape of data to be stored
and give many hints to the database engine as to how
we will be accessing or using the data.
• SQL is a language that provides us operations to Create,
Read, Update, and Delete (CRUD) our data in a
database.
WEB APPLICATIONS
Rational Databases and MySQL FOR EVERYBODY
Acknowledgements / Contributions
These slides are Copyright 2010- Charles R. Continue new Contributors and Translators here
Severance (www.dr-chuck.com) as part of
www.wa4e.com and made available under a Creative
Commons Attribution 4.0 License. Please maintain
this last slide in all copies of the document to comply
with the attribution requirements of the license. If
you make a change, feel free to add your name and
organization to the list of contributors on this page as
you republish the materials.
Initial Development: Charles Severance, University of
Michigan School of Information
Insert new Contributors and Translators here including
names and dates