70
This is CS50

This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

This is CS50

Page 2: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 3: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 4: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

relational databases

Page 5: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

sqlite3

Page 6: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

.mode csv

.import FILE TABLE

.schema

Page 7: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

C

R

U

D

Page 8: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

CREATE

READ

UPDATE

DELETE

Page 9: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

SQL

Page 10: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

INSERT

SELECT

UPDATE

DELETE

...

Page 11: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

CREATE TABLE table (column type, ...);

Page 12: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

BLOB

INTEGER

NUMERIC

REAL

TEXT

Page 13: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

BLOB

INTEGER

smallint

integer

bigint

NUMERIC

REAL

TEXT

Page 14: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

BLOB

INTEGER

NUMERIC

REAL

real

double precision

TEXT

Page 15: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

BLOB

INTEGER

NUMERIC

boolean

date

datetime

numeric(scale,precision)

time

timestamp

REAL

TEXT

Page 16: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

BLOB

INTEGER

NUMERIC

REAL

TEXT

char(n)

varchar(n)

text

Page 17: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

INSERT INTO table (column, ...) VALUES(value, ...);

Page 18: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

SELECT columns FROM table;

Page 19: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

AVG

COUNT

DISTINCT

MAX

MIN

...

Page 20: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

WHERE

LIKE

LIMIT

GROUP BY

ORDER BY

JOIN

...

Page 21: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

SELECT columns FROM table WHERE condition;

Page 22: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

UPDATE table SET column=value WHERE condition;

Page 23: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

DELETE FROM table WHERE condition;

Page 24: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

IMDbimdb.com/interfaces

Page 25: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 26: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 27: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 28: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 29: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 30: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 31: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 32: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

Please don’t eat candy in here btw :)

Page 33: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 34: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

db = cs50.SQL("sqlite:///shows.db")

Page 35: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 36: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 37: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.basics.tsv

tconst tt4786824

titleType tvSeries

primaryTitle The Crown

startYear 2016

genres Drama,History

...

Page 38: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

name.basics.tsv

nconst nm2946516

primaryName Claire Foy

birthYear 1984

...

Page 39: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.principals.tsv

tconst tt4786824

nconst nm2946516

category actress

...

Page 40: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

title.ratings.tsv

tconst tt4786824

averageRating 8.7

numVotes 88529

...

Page 41: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 42: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

PRIMARY KEY

FOREIGN KEY

UNIQUE

INDEX

Page 43: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

AUTOINCREMENT

NOT NULL

Page 44: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

indexes

Page 45: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

B-trees

Page 46: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 47: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

CREATE INDEX name ON table (column, ...);

Page 48: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

CREATE INDEX name ON table (column, ...);

Page 49: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

CREATE INDEX name ON table (column, ...);

Page 50: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

CREATE INDEX name ON table (column, ...);

Page 51: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

CREATE INDEX name ON table (column, ...);

Page 52: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

DB Browser for SQLitesqlitebrowser.org

Page 53: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

race conditions

Page 54: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute("SELECT likes FROM posts WHERE id=?", id);

likes = rows[0]["likes"]

db.execute("UPDATE posts SET likes = ?", likes + 1);

Page 55: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute("SELECT likes FROM posts WHERE id=?", id);

likes = rows[0]["likes"]

db.execute("UPDATE posts SET likes = ?", likes + 1);

Page 56: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

BEGIN TRANSACTION

COMMIT

ROLLBACK

Page 57: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

SQL injection attacks

Page 58: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 59: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 60: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History
Page 61: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute("SELECT * FROM users WHERE username = ? AND password = ?", username, password)

if len(rows) == 1:

# Logged in!

Page 62: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute("SELECT * FROM users WHERE username = ? AND password = ?", username, password)

if len(rows) == 1:

# Logged in!

Page 63: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute("SELECT * FROM users WHERE username = ? AND password = ?", username, password)

if len(rows) == 1:

# Logged in!

Page 64: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute(f"SELECT * FROM users WHERE username = '{username}' AND password = '{password}'")

if len(rows) == 1:

# Logged in!

Page 65: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute(f"SELECT * FROM users WHERE username = '{username}' AND password = '{password}'")

if len(rows) == 1:

# Logged in!

Page 66: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute(f"SELECT * FROM users WHERE username = '[email protected]'--' AND password = '{password}'")

if len(rows) == 1:

# Logged in!

Page 67: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute(f"SELECT * FROM users WHERE username = '[email protected]'--' AND password = '{password}'")

if len(rows) == 1:

# Logged in!

Page 68: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

rows = db.execute("SELECT * FROM users WHERE username = ? AND password = ?", username, password)

if len(rows) == 1:

# Logged in!

Page 69: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

xkcd.com/327

Page 70: This is CS50 · 2019-12-31 · title.basics.tsv tconst tt4786824 titleType tvSeries primaryTitle The Crown startYear 2016 genres Drama,History

This is CS50