|
|
|
@ -5,6 +5,7 @@
|
|
|
|
1. Linking Tables
|
|
|
|
1. Linking Tables
|
|
|
|
1. Alias
|
|
|
|
1. Alias
|
|
|
|
1. Indexes
|
|
|
|
1. Indexes
|
|
|
|
|
|
|
|
1. Default Values
|
|
|
|
1. Constraints
|
|
|
|
1. Constraints
|
|
|
|
1. Distinct
|
|
|
|
1. Distinct
|
|
|
|
|
|
|
|
|
|
|
|
@ -51,8 +52,15 @@ ON t1.common_filed = t2.common_field;
|
|
|
|
|
|
|
|
|
|
|
|
1. `CREATE INDEX index_name ON table_name (column_name);`
|
|
|
|
1. `CREATE INDEX index_name ON table_name (column_name);`
|
|
|
|
1. `CREATE INDEX index_name ON table_name (column1_name, column2_name);`
|
|
|
|
1. `CREATE INDEX index_name ON table_name (column1_name, column2_name);`
|
|
|
|
1. use `\d table_name` to view indexes
|
|
|
|
|
|
|
|
1. Primary Key
|
|
|
|
1. Primary Key
|
|
|
|
|
|
|
|
1. use `\d table_name` to view indexes
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Default Values
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
|
|
CREATE TABLE people (id SERIAL, age INT DEAFULT 0);
|
|
|
|
|
|
|
|
\d people
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Constraints
|
|
|
|
### Constraints
|
|
|
|
|
|
|
|
|
|
|
|
@ -73,6 +81,7 @@ CREATE TABLE people(
|
|
|
|
email VARCHAR(32) NOT NULL UNIQUE,
|
|
|
|
email VARCHAR(32) NOT NULL UNIQUE,
|
|
|
|
company_id INT REFERENCES companies(id)
|
|
|
|
company_id INT REFERENCES companies(id)
|
|
|
|
);
|
|
|
|
);
|
|
|
|
|
|
|
|
\d people
|
|
|
|
INSERT INTO people (name, email, company_id) VALUES ('bob', 'bob@bob.com', 999)
|
|
|
|
INSERT INTO people (name, email, company_id) VALUES ('bob', 'bob@bob.com', 999)
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
@ -105,6 +114,9 @@ TRUNCATE TABLE people; -- delete all data, but don't delete table itself
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
```sql
|
|
|
|
CREATE VIEW new_yorkers AS SELECT * FROM people WHERE city = 'NYC';
|
|
|
|
CREATE VIEW new_yorkers AS SELECT * FROM people WHERE city = 'NYC';
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\dv
|
|
|
|
|
|
|
|
|
|
|
|
SELECT * FROM new_yorkers
|
|
|
|
SELECT * FROM new_yorkers
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
@ -117,6 +129,8 @@ CREATE FUNCTION add_numbers(a integer, b integer) RETURNS integer AS $$
|
|
|
|
END;
|
|
|
|
END;
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\df
|
|
|
|
|
|
|
|
|
|
|
|
SELECT add_numbers(2,4);
|
|
|
|
SELECT add_numbers(2,4);
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
@ -131,11 +145,34 @@ BEGIN
|
|
|
|
END
|
|
|
|
END
|
|
|
|
$$;
|
|
|
|
$$;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\df
|
|
|
|
|
|
|
|
|
|
|
|
call add_person('matt');
|
|
|
|
call add_person('matt');
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
### Triggers
|
|
|
|
### Triggers
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
```sql
|
|
|
|
|
|
|
|
CREATE TABLE backup_people (id INT, name VARCHAR(16), age INT);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE FUNCTION moveDeleted() RETURNS trigger AS $$
|
|
|
|
|
|
|
|
BEGIN
|
|
|
|
|
|
|
|
INSERT INTO backup_people VALUES (OLD.id, OLD.name, OLD.age);
|
|
|
|
|
|
|
|
RETURN OLD;
|
|
|
|
|
|
|
|
END;
|
|
|
|
|
|
|
|
$$ LANGUAGE plpgsql;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
CREATE TRIGGER archive_person
|
|
|
|
|
|
|
|
BEFORE DELETE on people
|
|
|
|
|
|
|
|
FOR EACH ROW
|
|
|
|
|
|
|
|
EXECUTE PROCEDURE moveDeleted();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
\df
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DELETE FROM people WHERE id = 1;
|
|
|
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
### Transactions
|
|
|
|
### Transactions
|
|
|
|
|
|
|
|
|
|
|
|
### Locks
|
|
|
|
### Locks
|
|
|
|
|