Useful Notes and Links

Reynier Cruz-Torres, PhD

Creating Databases and Tables

Datatypes

Primary and foreign keys

Constraints

Table constraints

CREATE table

CREATE TABLE table_name(
	column_name TYPE column_constraint,
	column_name TYPE column_constraint,
	table_constraint table_constraint
) INHERITS existing_table_name;
CREATE TABLE players(
	player_id SERIAL PRIMARY KEY,
	age SMALLINT NOT NULL
);
CREATE TABLE account(
	user_id SERIAL PRIMARY KEY,
	username VARCHAR(50) UNIQUE NOT NULL,
	password VARCHAR(50) NOT NULL,
	email VARCHAR(250) UNIQUE NOT NULL,
	created_on TIMESTAMP NOT NULL,
	last_login TIMESTAMP
)
CREATE TABLE job(
	job_id SERIAL PRIMARY KEY,
	job_name VARCHAR(200) UNIQUE NOT NULL
)
CREATE TABLE account_job(
	user_id INTEGER REFERENCES account(user_id),
	job_id INTEGER REFERENCES job(job_id),
	hire_date TIMESTAMP
)

INSERT:

INSERT INTO table (column1, column2, ...)
VALUES
(value1, value2, ...),
(value1, value2, ...),...;
INSERT INTO table (column1, column2, ...)
SELECT columns1, column2, ...
FROM another_table
WHERE condition;
INSERT into account(username,password,email,created_on)
VALUES
('Jose','password','jose@gmail.com',CURRENT_TIMESTAMP)
INSERT INTO job(job_name)
VALUES
('Astronaut')
INSERT INTO job(job_name)
VALUES
('President')
INSERT INTO account_job(user_id,job_id,hire_date)
VALUES
(1,1,CURRENT_TIMESTAMP)

UPDATE:

UPDATE table
SET column1 = value1,
column2 = value2, ...
WHERE condition;
UPDATE account
SET last_login = CURRENT_TIMESTAMP
WHERE last_login IS NULL;
UPDATE account
SET last_login = created_on
UPDATE TableA
SET original_col = TableB.new_col
FROM TableB
WHERE TableA.id = TableB.id
UPDATE account
SET last_login = created_on
RETURNING account_id, last_login

DELETE:

DELETE FROM Table
WHERE row_id = 1
DELETE FROM TableA
USING TableB
WHERE TableA.id = TableB.id

ALTER:

ALTER TABLE table_name action
ALTER TABLE table_name
ADD COLUMN new_col TYPE
ALTER TABLE table_name
DROP COLUMN col_name
ALTER TABLE table_name
ALTER COLUMN col_name
SET DEFAULT value
ALTER TABLE table_name
ALTER COLUMN col_name
DROP DEFAULT
ALTER TABLE table_name
ALTER COLUMN col_name
SET NOT NULL
ALTER TABLE table_name
ALTER COLUMN col_name
ADD CONSTRAINT constraint_name

Example from lectures:

CREATE TABLE information(
	info_id SERIAL PRIMARY KEY,
	title VARCHAR(500) NOT NULL,
	person VARCHAR(50) NOT NULL UNIQUE
)
ALTER TABLE information
RENAME TO new_info;
ALTER TABLE new_info
RENAME COLUMN person TO people;
ALTER TABLE new_info
ALTER COLUMN people DROP NOT NULL

DROP:

ALTER TABLE table_name
DROP COLUMN col_name
ALTER TABLE table_name
DROP COLUMN IF EXISTS col_name
ALTER TABLE table_name
DROP COLUMN col1,
DROP COLUMN col2

CHECK:

CREATE TABLE example(
	ex_id SERIAL PRIMARY KEY,
	age SMALLINT CHECK (age>21),
	parent_age SMALLINT CHECK (parent_age>age)
);
CREATE TABLE employees(
	emp_id SERIAL PRIMARY KEY,
	first_name VARCHAR(50) NOT NULL,
	last_name VARCHAR(50) NOT NULL,
	birthdate DATE CHECK (birthdate > '1900-01-01'),
	hire_date DATE CHECK (hire_date > birthdate),
	salary INTEGER CHECK (salary >= 0)
)
INSERT INTO employees(
	first_name, last_name, birthdate, hire_date,salary
)
VALUES
('Rey','Cruz-Torres','1990-03-03','2010-01-01',-100)