Tables
Creating tables
CREATE TABLE is an SQL statement used to create a new table in a database.
When you create a table, you define:
- Table name
- Column names
- Data types for each column
- Constraints (rules like
PRIMARY KEY,NOT NULL,UNIQUE,FOREIGN KEY, etc.)
Once created, the table becomes a permanent structure in your database (until dropped).
General Syntax
CREATE TABLE table_name (
column_name1 data_type constraint,
column_name2 data_type constraint,
...
table_constraints
);
table_name→ The name of your new table.column_name→ Each column’s name.data_type→ The kind of data the column will store (e.g.,INT,VARCHAR,DATE,DECIMAL).constraint→ Rules for the column (e.g.,NOT NULL,UNIQUE,PRIMARY KEY).table_constraints→ Constraints applied to the table as a whole (e.g., aPRIMARY KEYdefined at the end).
Example
CREATE TABLE students (
student_id CHAR(10) PRIMARY KEY, -- Unique ID like 'STU2025001'
name VARCHAR(100) NOT NULL, -- Student name
email VARCHAR(255) UNIQUE NOT NULL, -- Unique email address
date_of_birth DATE, -- Date of birth
enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, -- Auto-filled when record created
gpa DECIMAL(3,2) CHECK (gpa >= 0.00 AND gpa <= 4.00) -- Must be between 0 and 4
);
student_id CHAR(10) PRIMARY KEYCHAR(10)→ Fixed length string of exactly 10 characters.PRIMARY KEY→ Ensures eachstudent_idis unique and not null.
name VARCHAR(100) NOT NULLVARCHAR(100)→ Variable-length text up to 100 characters.NOT NULL→ Cannot be left empty.
email VARCHAR(255) UNIQUE NOT NULLUNIQUE→ No two students can have the same email.NOT NULL→ Must always have an email.
date_of_birth DATE- Stores date values (no time).
enrollment_date TIMESTAMP DEFAULT CURRENT_TIMESTAMPTIMESTAMP→ Date and time.DEFAULT CURRENT_TIMESTAMP→ Automatically stores the current date & time when inserted.
gpa DECIMAL(3,2) CHECK (gpa >= 0.00 AND gpa <= 4.00)DECIMAL(3,2)→ Number with up to 3 digits, 2 of them after the decimal (e.g.,3.75).CHECK→ Ensures GPA is within 0.00 to 4.00.
Viewing the table structure
DESCRIBE students;
Modifying tables
ALTER TABLE is an SQL command used to modify an existing table’s structure without dropping and recreating it.
It allows you to:
- Add new columns
- Modify existing columns
- Rename columns
- Drop columns
- Add or remove constraints
- Rename the table itself
General Syntax
ALTER TABLE table_name
action;
Where action could be:
ADD column_name data_type constraintsDROP COLUMN column_nameALTER COLUMN column_name TYPE new_data_typeRENAME COLUMN old_name TO new_nameADD CONSTRAINT constraint_name constraint_definitionDROP CONSTRAINT constraint_nameRENAME TO new_table_name
Dropping tables
DROP TABLE is an SQL command used to completely delete a table from a database.
When executed:
- The table’s structure is removed.
- All data in the table is permanently deleted.
- Any indexes, constraints, and triggers related to the table are also deleted.
- Important: This action cannot be undone (unless you have a backup).
General Syntax
DROP TABLE table_name; -- single
DROP TABLE table1, table2, ...; -- multiple
If you try to drop a table that doesn’t exist, some databases throw an error. To avoid that:
DROP TABLE IF EXISTS students;
If another table has a foreign key referencing the table you’re trying to drop, most databases will block the operation. In PostgreSQL, you can force it with CASCADE:
DROP TABLE students CASCADE;
- Drops
studentsand all dependent objects (foreign keys, views, etc.). - Be very careful —
CASCADEcan remove more than you expect.
Key Differences from TRUNCATE TABLE
| DROP TABLE | TRUNCATE TABLE |
|---|---|
| Deletes table structure & data | Deletes only data, keeps table structure |
| Removes indexes, constraints | Keeps indexes, constraints |
| Cannot be rolled back (unless in a transaction) | Often can be rolled back in transactions |
| Requires re-creating table to use again | Table is ready to use after truncating |
Adding and Removing Constraints
Constraints are rules applied to columns or tables to ensure data integrity and accuracy.
Common constraints include:
PRIMARY KEY→ Uniquely identifies each row.FOREIGN KEY→ Links rows to another table.UNIQUE→ Ensures all values in a column are different.NOT NULL→ Prevents null values.CHECK→ Ensures values meet a condition.DEFAULT→ Sets a default value for a column.
Adding Constraints with ALTER TABLE
Adding a PRIMARY KEY
ALTER TABLE table_name
ADD CONSTRAINT pk_constraint_name PRIMARY KEY (column_name);
pk_constraint_name→ Name of the primary key constraint.(column_name)→ Column(s) used for the primary key.- Column must be NOT NULL and unique.
Adding a FOREIGN KEY
ALTER TABLE table_name
ADD CONSTRAINT fk_constraint_name FOREIGN KEY (column_name)
REFERENCES parent_table(parent_column)
[ON DELETE CASCADE]
[ON UPDATE CASCADE];
fk_constraint_name→ Name of the foreign key.- Ensures values in the column exist in the parent table.
- Optional
ON DELETE/ON UPDATEactions enforce cascading behavior.
Adding a UNIQUE Constraint
ALTER TABLE table_name
ADD CONSTRAINT uq_constraint_name UNIQUE (column_name);
- Guarantees all values in the column are distinct.
Adding a CHECK Constraint
ALTER TABLE table_name
ADD CONSTRAINT chk_constraint_name CHECK (condition);
- Ensures column values meet a defined condition.
DEFAULT Constraint
ALTER TABLE table_name
ALTER COLUMN column_name SET DEFAULT default_value;
- Assigns a default value when none is provided.
Removing Constraints
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
How to Find Constraint Names
Before removing a constraint, you must know its exact name.
\d Students; -- PostgreSQL
SHOW CREATE TABLE students; -- MySQL
- Displays the full
CREATE TABLEstatement for thestudentstable. - Includes all defined constraints (with their names).