Lecture 6
Lecture 6
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 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
3 Profusion of … 0 3 Profusion of …
3 Profusion of … 0 3 Profusion of …
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 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, …);
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