Download - CS50 Beyond
![Page 1: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/1.jpg)
CS50 Beyond
![Page 2: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/2.jpg)
Databases
![Page 3: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/3.jpg)
origin destination duration
New York London 415
Shanghai Paris 760
Istanbul Tokyo 700
New York Paris 435
Moscow Paris 245
Lima New York 455
![Page 4: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/4.jpg)
SQL
![Page 5: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/5.jpg)
SQL Databases
• MySQL • PostgreSQL • SQLite • ...
![Page 6: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/6.jpg)
Data Types• INTEGER
• DECIMAL • SERIAL • VARCHAR • TIMESTAMP • BOOLEAN • ENUM • ...
![Page 7: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/7.jpg)
CREATE TABLE
![Page 8: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/8.jpg)
CREATE TABLE flights ( id SERIAL PRIMARY KEY, origin VARCHAR NOT NULL, destination VARCHAR NOT NULL, duration INTEGER NOT NULL );
![Page 9: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/9.jpg)
CREATE TABLE flights ( id SERIAL PRIMARY KEY, origin VARCHAR NOT NULL, destination VARCHAR NOT NULL, duration INTEGER NOT NULL );
![Page 10: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/10.jpg)
CREATE TABLE flights ( id SERIAL PRIMARY KEY, origin VARCHAR NOT NULL, destination VARCHAR NOT NULL, duration INTEGER NOT NULL );
![Page 11: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/11.jpg)
CREATE TABLE flights ( id SERIAL PRIMARY KEY, origin VARCHAR NOT NULL, destination VARCHAR NOT NULL, duration INTEGER NOT NULL );
![Page 12: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/12.jpg)
CREATE TABLE flights ( id SERIAL PRIMARY KEY, origin VARCHAR NOT NULL, destination VARCHAR NOT NULL, duration INTEGER NOT NULL );
![Page 13: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/13.jpg)
CREATE TABLE flights ( id SERIAL PRIMARY KEY, origin VARCHAR NOT NULL, destination VARCHAR NOT NULL, duration INTEGER NOT NULL );
![Page 14: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/14.jpg)
CREATE TABLE flights ( id SERIAL PRIMARY KEY, origin VARCHAR NOT NULL, destination VARCHAR NOT NULL, duration INTEGER NOT NULL );
![Page 15: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/15.jpg)
Constraints
• NOT NULL
• UNIQUE • PRIMARY KEY • DEFAULT • CHECK • ...
![Page 16: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/16.jpg)
INSERT
![Page 17: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/17.jpg)
INSERT INTO flights (origin, destination, duration) VALUES ('New York', 'London', 415);
![Page 18: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/18.jpg)
INSERT INTO flights (origin, destination, duration) VALUES ('New York', 'London', 415);
![Page 19: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/19.jpg)
INSERT INTO flights (origin, destination, duration) VALUES ('New York', 'London', 415);
![Page 20: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/20.jpg)
INSERT INTO flights (origin, destination, duration) VALUES ('New York', 'London', 415);
![Page 21: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/21.jpg)
INSERT INTO flights (origin, destination, duration) VALUES ('New York', 'London', 415);
![Page 22: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/22.jpg)
INSERT INTO flights (origin, destination, duration) VALUES ('New York', 'London', 415);
![Page 23: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/23.jpg)
SELECT
![Page 24: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/24.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights;
![Page 25: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/25.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights;
![Page 26: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/26.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT origin, destination FROM flights;
![Page 27: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/27.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT origin, destination FROM flights;
![Page 28: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/28.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE id = 3;
![Page 29: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/29.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE id = 3;
![Page 30: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/30.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE origin = 'New York';
![Page 31: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/31.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE origin = 'New York';
![Page 32: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/32.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE duration > 500;
![Page 33: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/33.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE duration > 500;
![Page 34: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/34.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE destination = 'Paris' AND duration > 500;
![Page 35: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/35.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE destination = 'Paris' AND duration > 500;
![Page 36: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/36.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE destination = 'Paris' OR duration > 500;
![Page 37: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/37.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE destination = 'Paris' OR duration > 500;
![Page 38: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/38.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE origin IN ('New York', 'Lima');
![Page 39: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/39.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE origin IN ('New York', 'Lima');
![Page 40: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/40.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE origin LIKE '%a%';
![Page 41: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/41.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
SELECT * FROM flights WHERE origin LIKE '%a%';
![Page 42: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/42.jpg)
Functions
• SUM
• COUNT • MIN • MAX • AVG • ...
![Page 43: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/43.jpg)
UPDATE
![Page 44: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/44.jpg)
UPDATE flights SET duration = 430 WHERE origin = 'New York' AND destination = 'London';
![Page 45: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/45.jpg)
DELETE
![Page 46: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/46.jpg)
DELETE FROM flights WHERE destination = 'Tokyo';
![Page 47: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/47.jpg)
Other Clauses
• LIMIT
• ORDER BY • GROUP BY • HAVING • ...
![Page 48: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/48.jpg)
Foreign Keys
![Page 49: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/49.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
flights
![Page 50: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/50.jpg)
id origin origin_code destination destination_code duration
1 New York JFK London LHR 4152 Shanghai PVG Paris CDG 7603 Istanbul IST Tokyo NRT 7004 New York JFK Paris CDG 4355 Moscow SVO Paris CDG 2456 Lima LIM New York JFK 455
flights
![Page 51: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/51.jpg)
id code name1 JFK New York2 PVG Shanghai3 IST Istanbul4 LHR London5 SVO Moscow6 LIM Lima7 CDG Paris8 NRT Tokyo
locations
![Page 52: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/52.jpg)
id origin_id destination_id duration1 1 4 4152 2 7 7603 3 8 7004 1 7 4355 5 7 2456 6 1 455
flights
![Page 53: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/53.jpg)
id name flight_id1 Alice 12 Bob 13 Charlie 24 Dave 25 Erin 46 Frank 67 Grace 6
passengers
![Page 54: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/54.jpg)
JOIN
![Page 55: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/55.jpg)
Types of JOINs
• JOIN / INNER JOIN
• LEFT OUTER JOIN • RIGHT OUTER JOIN • FULL OUTER JOIN
![Page 56: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/56.jpg)
CREATE INDEX
![Page 57: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/57.jpg)
Nested Queries
![Page 58: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/58.jpg)
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
flights
![Page 59: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/59.jpg)
id name flight_id1 Alice 12 Bob 13 Charlie 24 Dave 25 Erin 46 Frank 67 Grace 6
passengers
![Page 60: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/60.jpg)
SELECT flight_id FROM passengers GROUP BY flight_id HAVING COUNT(*) > 1;
![Page 61: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/61.jpg)
id name flight_id1 Alice 12 Bob 13 Charlie 24 Dave 25 Erin 46 Frank 67 Grace 6
SELECT flight_id FROM passengers GROUP BY flight_id HAVING COUNT(*) > 1;
![Page 62: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/62.jpg)
id name flight_id1 Alice 12 Bob 13 Charlie 24 Dave 25 Erin 46 Frank 67 Grace 6
SELECT flight_id FROM passengers GROUP BY flight_id HAVING COUNT(*) > 1;
flight_id126
![Page 63: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/63.jpg)
SELECT flight_id FROM passengers GROUP BY flight_id HAVING COUNT(*) > 1;
flight_id126
![Page 64: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/64.jpg)
SELECT * FROM flights WHERE id IN (SELECT flight_id FROM passengers
GROUP BY flight_id HAVING COUNT(*) > 1);
flight_id126
![Page 65: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/65.jpg)
SELECT * FROM flights WHERE id IN (SELECT flight_id FROM passengers
GROUP BY flight_id HAVING COUNT(*) > 1);
flight_id126
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
![Page 66: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/66.jpg)
SELECT * FROM flights WHERE id IN (SELECT flight_id FROM passengers
GROUP BY flight_id HAVING COUNT(*) > 1);
flight_id126
id origin destination duration1 New York London 4152 Shanghai Paris 7603 Istanbul Tokyo 7004 New York Paris 4355 Moscow Paris 2456 Lima New York 455
![Page 67: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/67.jpg)
SQL Injection
![Page 68: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/68.jpg)
Username:
Password:
![Page 69: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/69.jpg)
SELECT * FROM users WHERE (username = username) AND (password = password);
![Page 70: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/70.jpg)
alice
12345
Username:
Password:
![Page 71: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/71.jpg)
SELECT * FROM users WHERE (username = username) AND (password = password);
![Page 72: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/72.jpg)
SELECT * FROM users WHERE (username = 'alice') AND (password = '12345');
![Page 73: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/73.jpg)
hacker
1' OR '1' = '1
Username:
Password:
![Page 74: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/74.jpg)
SELECT * FROM users WHERE (username = username) AND (password = password);
![Page 75: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/75.jpg)
SELECT * FROM users WHERE (username = 'hacker') AND (password = '1' OR '1' = '1');
![Page 76: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/76.jpg)
Race Conditions
![Page 77: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/77.jpg)
Race Conditions
$100
Bank Account
![Page 78: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/78.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
![Page 79: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/79.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
100
![Page 80: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/80.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
100
UPDATE bank SET balance = balance - 100 WHERE user_id = 1;
$100
![Page 81: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/81.jpg)
Race Conditions
$0
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
$100
100
UPDATE bank SET balance = balance - 100 WHERE user_id = 1;
![Page 82: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/82.jpg)
Race Conditions
$100
Bank Account
![Page 83: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/83.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
![Page 84: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/84.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
100
![Page 85: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/85.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
100SELECT balance FROM bank WHERE user_id = 1;
![Page 86: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/86.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
100SELECT balance FROM bank WHERE user_id = 1;
100
![Page 87: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/87.jpg)
Race Conditions
$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
$100
100SELECT balance FROM bank WHERE user_id = 1;
100UPDATE bank SET balance = balance - 100 WHERE user_id = 1;
![Page 88: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/88.jpg)
Race Conditions
$0
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
$100
100SELECT balance FROM bank WHERE user_id = 1;
100UPDATE bank SET balance = balance - 100 WHERE user_id = 1;
![Page 89: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/89.jpg)
Race Conditions
$0
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
$100
100SELECT balance FROM bank WHERE user_id = 1;
100UPDATE bank SET balance = balance - 100 WHERE user_id = 1; UPDATE bank
SET balance = balance - 100 WHERE user_id = 1;
$100
![Page 90: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/90.jpg)
Race Conditions
-$100
Bank AccountSELECT balance FROM bank WHERE user_id = 1;
$100
100SELECT balance FROM bank WHERE user_id = 1;
100UPDATE bank SET balance = balance - 100 WHERE user_id = 1; UPDATE bank
SET balance = balance - 100 WHERE user_id = 1;
$100
![Page 91: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/91.jpg)
SQL Transactions
• BEGIN
• COMMIT
![Page 92: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/92.jpg)
SQLAlchemy
![Page 93: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/93.jpg)
Morning Project
• Create a database on Heroku. • Decide on a database schema and create tables: one
for authors and one for books. • Write a Python program to import data into the
database. • Write a Python program that queries the database
for a book by its (partial) title or author.
![Page 94: CS50 Beyond](https://reader033.vdocuments.site/reader033/viewer/2022052301/628908c0c96b216b8034b667/html5/thumbnails/94.jpg)
CS50 Beyond