0% found this document useful (0 votes)
16 views

Lecture 6

Uploaded by

b210586
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
16 views

Lecture 6

Uploaded by

b210586
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 153

Introduction to

Databases with SQL


Scaling
Scalability
Ability to increase or decrease capacity
to meet demand
MySQL
PostgreSQL

Types
CREATE TABLE "cards" (
"id" INTEGER,
PRIMARY KEY("id")
);
Integers
Data Type

TINYINT

SMALLINT

MEDIUMINT

INT

BIGINT
Data Type Size
(in Bytes)

TINYINT 1

SMALLINT 2

MEDIUMINT 3

INT 4

BIGINT 8
Data Type Size Minimum Value Maximum Value
(in Bytes) (Signed) (Signed)

TINYINT 1 -128 127

SMALLINT 2 -32,768 32,767

MEDIUMINT 3 -8,388,608 8,388,607

INT 4 -2,147,483,648 2,147,483,647

BIGINT 8 -263 263 - 1


Data Type Size Minimum Value Maximum Value
(in Bytes) (Unsigned) (Unsigned)

TINYINT 1 0 255

SMALLINT 2 0 65,535

MEDIUMINT 3 0 16,777,215

INT 4 0 4,294,967,295

BIGINT 8 0 264 - 1
CREATE TABLE "cards" (
"id" INTEGER,
PRIMARY KEY("id")
);
CREATE TABLE `cards` (
`id` INTEGER,
PRIMARY KEY(`id`)
);
CREATE TABLE `cards` (
`id` INT,
PRIMARY KEY(`id`)
);
CREATE TABLE `cards` (
`id` INT AUTO_INCREMENT,
PRIMARY KEY(`id`)
);
CREATE TABLE "stations" (
"id" INTEGER,
"name" TEXT NOT NULL UNIQUE,
"line" TEXT NOT NULL,
PRIMARY KEY("id")
);
Strings
CHAR
VARCHAR
CHAR(M)
VARCHAR(M)
TEXT
TINYTEXT
TEXT
MEDIUMTEXT
LONGTEXT
BLOB
ENUM
SET
CREATE TABLE "stations" (
"id" INTEGER,
"name" TEXT NOT NULL UNIQUE,
"line" TEXT NOT NULL,
PRIMARY KEY("id")
);
CREATE TABLE `stations` (
`id` INTEGER,
`name` TEXT NOT NULL UNIQUE,
`line` TEXT NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `stations` (
`id` INT AUTO_INCREMENT,
`name` TEXT NOT NULL UNIQUE,
`line` TEXT NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `stations` (
`id` INT AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL …,
`line` TEXT NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `stations` (
`id` INT AUTO_INCREMENT,
`name` VARCHAR(32) NOT NULL …,
`line` ENUM('blue', …) NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE "swipes" (
…,
"type" TEXT NOT NULL CHECK("type" IN ('enter', …)),
"datetime" NUMERIC NOT NULL DEFAULT CURRENT_TIMESTAMP,
"amount" NUMERIC NOT NULL CHECK("amount" != 0),

);
Dates
Times
DATE
TIME
DATETIME
TIMESTAMP
YEAR
DATE
TIME(fsp)
DATETIME(fsp)
TIMESTAMP(fsp)
YEAR
Real Numbers
Data Type Size
(in Bytes)

FLOAT 4

DOUBLE PRECISION 8
Floating-Point Imprecision
Fixed Precision
DECIMAL
DECIMAL(M,D)
999.99
DECIMAL(5,2)
-999.99
999.99
DECIMAL(5,2)
-999.99
9999.99

DECIMAL(6,2)

-9999.99
99999.99

DECIMAL(7,2)

-99999.99
99999.99

DECIMAL(7,2)

-99999.99
9999.999

DECIMAL(7,3)

-9999.999
999.9999
DECIMAL(7,4)
-999.9999
CREATE TABLE "swipes" (
…,
"type" TEXT NOT NULL CHECK("type" IN ('enter', …)),
"datetime" NUMERIC NOT NULL DEFAULT CURRENT_TIMESTAMP,
"amount" NUMERIC NOT NULL CHECK("amount" != 0),

);
CREATE TABLE `swipes` (
…,
`type` TEXT NOT NULL CHECK(`type` IN ('enter', …)),
`datetime` NUMERIC NOT NULL DEFAULT CURRENT_TIMESTAMP,
`amount` NUMERIC NOT NULL CHECK(`amount` != 0),

);
CREATE TABLE `swipes` (
…,
`type` ENUM('enter', …) NOT NULL,
`datetime` NUMERIC NOT NULL DEFAULT CURRENT_TIMESTAMP,
`amount` NUMERIC NOT NULL CHECK(`amount` != 0),

);
CREATE TABLE `swipes` (
…,
`type` ENUM('enter', …) NOT NULL,
`datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`amount` NUMERIC NOT NULL CHECK(`amount` != 0),

);
CREATE TABLE `swipes` (
…,
`type` ENUM('enter', …) NOT NULL,
`datetime` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
`amount` DECIMAL(5,2) NOT NULL CHECK(`amount` != 0),

);
Altering Tables
ALTER TABLE …
ALTER TABLE …
MODIFY …;
Stored Procedures
collections
id title deleted

1 Farmers working … 0

2 Imaginative land… 0

3 Profusion of … 0

4 Peonies and … 0
collections
id title deleted

1 Farmers working … 1

2 Imaginative land… 0

3 Profusion of … 0

4 Peonies and … 0
SELECT * FROM "collections"
WHERE "deleted" = 0;
collections current_collections
id title deleted id title

1 Farmers working … 0 1 Farmers working …

2 Imaginative land… 0 2 Imaginative land…

3 Profusion of … 0 3 Profusion of …

4 Peonies and … 0 4 Peonies and …


collections current_collections
id title deleted id title

1 Farmers working … 0 1 Farmers working …

2 Imaginative land… 0 2 Imaginative land…

3 Profusion of … 0 3 Profusion of …

4 Peonies and … 0 4 Peonies and …


collections current_collections
id title deleted id title

1 Farmers working … 1 2 Imaginative land…

2 Imaginative land… 0 3 Profusion of …

3 Profusion of … 0 4 Peonies and …

4 Peonies and … 0
CREATE PROCEDURE name
CREATE PROCEDURE name
BEGIN
CREATE PROCEDURE name
BEGIN

CREATE PROCEDURE name
BEGIN

END;
CREATE PROCEDURE name(parameters)
BEGIN

END;
IF, ELSEIF, ELSE
LOOP
REPEAT
WHILE

PostgreSQL
CREATE TABLE "cards" (
"id" INTEGER,
PRIMARY KEY("id")
);
Integers
Data Type Size Minimum Value Maximum Value
(in Bytes) (Signed) (Signed)

SMALLINT 2 -32,768 32,767

INT 4 -2,147,483,648 2,147,483,647

BIGINT 8 -263 263 - 1


Data Type Size Minimum Value Maximum Value
(in Bytes) (Unsigned) (Unsigned)

SMALLINT 2 0 65,535

INT 4 0 4,294,967,295

BIGINT 8 0 264 - 1
SMALLSERIAL
SERIAL
BIGSERIAL
CREATE TABLE "cards" (
"id" INTEGER,
PRIMARY KEY("id")
);
CREATE TABLE "cards" (
"id" SERIAL,
PRIMARY KEY("id")
);
CREATE TABLE "stations" (
"id" INTEGER,
"name" TEXT NOT NULL UNIQUE,
"line" TEXT NOT NULL,
PRIMARY KEY("id")
);
CREATE TABLE "stations" (
"id" SERIAL,
"name" TEXT NOT NULL UNIQUE,
"line" TEXT NOT NULL,
PRIMARY KEY("id")
);
CREATE TABLE "stations" (
"id" SERIAL,
"name" VARCHAR(32) NOT NULL …,
"line" TEXT NOT NULL,
PRIMARY KEY("id")
);
CREATE TABLE "stations" (
"id" SERIAL,
"name" VARCHAR(32) NOT NULL …,
"line" VARCHAR(32) NOT NULL,
PRIMARY KEY("id")
);
CREATE TABLE "swipes" (
…,
"type" TEXT NOT NULL CHECK("type" IN ('enter', …)),
"datetime" NUMERIC NOT NULL DEFAULT CURRENT_TIMESTAMP,
"amount" NUMERIC NOT NULL CHECK("amount" != 0),

);
ENUM
CREATE TYPE "swipe_type"
AS ENUM ('enter', 'exit', 'deposit');
Dates
Times
TIMESTAMP
DATE
TIME
INTERVAL
TIMESTAMP(p)
DATE
TIME(p)
INTERVAL(p)
Real Numbers
MONEY
NUMERIC(precision,scale)
CREATE TABLE "swipes" (
…,
"type" TEXT NOT NULL CHECK("type" IN ('enter', …)),
"datetime" NUMERIC NOT NULL DEFAULT CURRENT_TIMESTAMP,
"amount" NUMERIC NOT NULL CHECK("amount" != 0),

);
CREATE TYPE "swipe_type" AS ENUM('enter, …);

CREATE TABLE "swipes" (


…,
"type" "swipe_type" NOT NULL,
"datetime" NUMERIC NOT NULL DEFAULT CURRENT_TIMESTAMP,
"amount" NUMERIC NOT NULL CHECK("amount" != 0),

);
CREATE TYPE "swipe_type" AS ENUM('enter, …);

CREATE TABLE "swipes" (


…,
"type" "swipe_type" NOT NULL,
"datetime" TIMESTAMP NOT NULL DEFAULT now(),
"amount" NUMERIC NOT NULL CHECK("amount" != 0),

);
CREATE TYPE "swipe_type" AS ENUM('enter, …);

CREATE TABLE "swipes" (


…,
"type" "swipe_type" NOT NULL,
"datetime" TIMESTAMP NOT NULL DEFAULT now(),
"amount" NUMERIC(5,2) NOT NULL CHECK("amount" != 0),

);
100 reads/minute
50 writes/minute
1,000 reads/minute
500 writes/minute
10,000 reads/minute
5,000 writes/minute
100,000 reads/minute
50,000 writes/minute
Vertical Scaling
Increasing capacity by increasing a server's
computing power
Horizontal Scaling
Increasing capacity by distributing load across
multiple servers
Replication
Keeping copies of a database on
multiple servers
Single-Leader
Multi-Leader
Leaderless

Single-Leader
Leader Follower
Leader Follower
Leader Follower
Leader Follower
Read Replica
A copy of a database from which
data may only be read
Synchronous
Asynchronous
Synchronous
Client

Server
Client

Server
Client

Server
Client

Leader

Follower
Client

Leader

Follower
Client

Leader

Follower
Client

Leader

Follower
Client

Leader

Follower
Asynchronous
Client

Leader

Follower
Client

Leader

Follower
Client

Leader

Follower
Client

Leader

Follower
Sharding
A–I J–R S–Z
1–1000 1001–2000 2001–3000
Access Control
CREATE USER …;
GRANT privilege, … TO user;
REVOKE privilege, … FROM user;
ALL
CREATE
INSERT
SELECT
UPDATE
DELETE

SQL Injection Attacks
SELECT `id` FROM `users`
WHERE `username` = '…'
AND `password` = '…';
SELECT `id` FROM `users`
WHERE `username` = 'Carter'
AND `password` = '…';
SELECT `id` FROM `users`
WHERE `username` = 'Carter'
AND `password` = 'password';
SELECT `id` FROM `users`
WHERE `username` = 'Carter'
AND `password` = '…';
SELECT `id` FROM `users`
WHERE `username` = 'Carter'
AND `password` = 'password'
OR '1' = '1';
SELECT `balance` FROM `accounts`
WHERE `id` = …;
SELECT `balance` FROM `accounts`
WHERE `id` = 123456789;
SELECT `balance` FROM `accounts`
WHERE `id` = …;
SELECT `balance` FROM `accounts`
WHERE `id` = 123456789 UNION
SELECT `id` FROM `accounts`;
Prepared Statements
PREPARE name FROM statement;
SELECT `balance` FROM `accounts`
WHERE `id` = ?;
EXECUTE name USING value0, …;
Querying
Relating
Designing
Writing
Viewing
Optimizing
Scaling
Introduction to
Databases with SQL
Scaling

You might also like