SQL: Unique and primary keys

With a table created with this command:

CREATE TABLE people (
  age INTEGER NOT NULL,
  name TEXT NOT NULL
);

We can have columns that repeat the same value. The DBMS does not care.

But, we can force a column to have only unique values using the UNIQUE key constraint:

DROP TABLE people;

CREATE TABLE people (
  age INTEGER NOT NULL,
  name TEXT NOT NULL UNIQUE
);

Now if you try to add the ‘Flavio’ twice:

INSERT INTO people (age, name) VALUES (39, 'Flavio');
INSERT INTO people (age, name) VALUES (38, 'Flavio');

You’d get an error:

A primary key is a unique key that has another property: it’s the primary way we identify a row in the table.

What we usually do (but not always) is we use the SERIAL type for the primary key, which means it’s a unique INTEGER value that we assign to each record and we increment it automatically any time we add as new record.

DROP TABLE people;

CREATE TABLE people (
  id SERIAL PRIMARY KEY,
  age INTEGER NOT NULL,
  name TEXT NOT NULL
);

So when we add an item we can omit its value, because the DBMS knows its value:

INSERT INTO people (age, name) VALUES (39, 'Flavio');
INSERT INTO people (age, name) VALUES (20, 'Roger');
id | age |  name
---+-----+------
1  | 39 |  'Flavio'
2  | 20 |  'Roger'

It’s important to define a primary key so:

  • we always know we can uniquely identify a row in the table
  • we can create relationships between tables, so a table can reference a row into another table
  • we can have data integrity and referential integrity (something we’ll not talk about, but it’s important to note)
  • and last but not least, it’s important for speed, so the database can figure out how to optimize your table

Lessons in this unit:

0: Introduction
1: Using TablePlus
2: Create a Postgres database
3: Create a new table
4: Add data to a table
5: Query data with SELECT
6: Delete data from the database
7: Update data with UPDATE
8: Null constraints
9: ▶︎ Unique and primary keys
10: Updating a table structure
11: Joins
12: DEMO Using Vercel Postgres COMING SOON
Are you intimidated by Git? Can’t figure out merge vs rebase? Are you afraid of screwing up something any time you have to do something in Git? Do you rely on ChatGPT or random people’s answer on StackOverflow to fix your problems? Your coworkers are tired of explaining Git to you all the time? Git is something we all need to use, but few of us really master it. I created this course to improve your Git (and GitHub) knowledge at a radical level. Launching May 21, 2024. Join the waiting list!