Employees(name,email,office,salary)
with 5000 rows.
SELECT email FROM Employees WHERE name='Thomas'
SELECT name FROM Employees WHERE salary>50000
CREATE INDEX
statement.
movies.sql
(tables),
import.psql
,
views.sql
,
indexes.sql
.
Names_basics
contains almost 10 million rows.
\d+
, \di+
SELECT … FROM … WHERE condition
a='something'
, a<='someting'
, a>'something'
, …
price>100 AND price<200
name='Karl' OR name='Carl'
(requires two scans of the index)
name LIKE 'Tom%'
name LIKE '%Cruise'
UPDATE Accounts SET balance=balance-2000 WHERE name='Alice'; UPDATE Accounts SET balance=balance+2000 WHERE name='Bob';
START TRANSACTION; UPDATE Accounts SET balance=balance-2000 WHERE name='Alice'; UPDATE Accounts SET balance=balance+2000 WHERE name='Bob'; COMMIT;
UPDATE Accounts SET balance=balance-2000 WHERE name='Alice'; UPDATE Accounts SET balance=balance+2000 WHERE name='Bob';
b1 := READ balance FROM Accounts WHERE name='Alice'; WRITE balance=b1-2000 TO Accounts WHERE name='Alice'; b2 := READ balance FROM Accounts WHERE name='Bob'; WRITE balance=b2+2000 TO Accounts WHERE name='Bob';
name | balance |
---|---|
Alice | 30000 |
Bob | 20000 |
Carl | 1000 |
UPDATE Accounts SET balance=balance-2000 WHERE name='Alice'; UPDATE Accounts SET balance=balance+2000 WHERE name='Bob';
UPDATE Accounts SET balance=balance-1000 WHERE name='Bob'; UPDATE Accounts SET balance=balance+1000 WHERE name='Carl';
name | balance |
---|---|
Alice | 28000 |
Bob | 21000 |
Carl | 2000 |
b1 := READ balance FROM Accounts WHERE name='Alice';
WRITE balance=b1-2000 TO Accounts WHERE name='Alice';
b2 := READ balance FROM Accounts WHERE name='Bob';
WRITE balance=b2+2000 TO Accounts WHERE name='Bob';
b3 := READ balance FROM Accounts WHERE name='Bob';
WRITE balance=b3-1000 TO Accounts WHERE name='Bob';
b4 := READ balance FROM Accounts WHERE name='Carl';
WRITE balance=b4+1000 TO Accounts WHERE name='Carl';
T1 | T2 | |
---|---|---|
1. | insert v | |
2. | read v | |
3. | rollback |
T1 | T2 | |
---|---|---|
1. | read a | |
2. | update a=a' commit | |
3. | read a |
T1 | T2 | |
---|---|---|
1. | SELECT * FROM A | |
2. | INSERT INTO A … COMMIT | |
3. | SELECT * FROM A |
START TRANSACTION isolation_level;
Dirty reads | Non-repeatable reads | Phantoms | |
---|---|---|---|
READ UNCOMMITTED | yes | yes | yes |
READ COMMITTED | no | yes | yes |
REPEATABLE READ | no | no | yes |
SERIALIZABLE | no | no | no |
BEGIN
instead of START TRANSACTION
.
conn.setAutoCommit(false);
.
conn
is your Connection
object.
conn.commit();
or
conn.rollback();
conn.setTransactionIsolation(…)
GRANT SELECT ON Products TO webshop_users, marketing;
GRANT SELECT(name,email,office) ON Employees TO PUBLIC;
REVOKE UPDATE, DELETE ON Transfers FROM staff;
GRANT UPDATE(salary) ON Employees TO Bob WITH GRANT OPTION;
Alice: GRANT R TO Bob WITH GRANT OPTION;
Bob: GRANT R TO Carl;
Alice: REVOKE GRANT OPTION FOR R FROM U
Alice: REVOKE R FROM U