DEV Community

Harsh Mishra
Harsh Mishra

Posted on

Guide to ALTER TABLE in MySQL

The Complete Guide to ALTER TABLE in MySQL: A Comprehensive Explanation

MySQL ALTER TABLE is a powerful command used to modify an existing table structure without deleting or recreating it. This guide covers all aspects of ALTER TABLE, including adding, deleting, modifying columns, constraints, indexes, renaming tables, and much more, with real-world examples, SQL queries, and sample output.


1. Understanding ALTER TABLE in MySQL

The ALTER TABLE statement allows you to change the structure of a table dynamically.

Use Cases of ALTER TABLE

  • Adding new columns to an existing table.
  • Modifying data types or attributes of existing columns.
  • Renaming columns or tables.
  • Adding or removing constraints (e.g., PRIMARY KEY, FOREIGN KEY, UNIQUE, CHECK).

2. Basic Syntax of ALTER TABLE

ALTER TABLE table_name action;
Enter fullscreen mode Exit fullscreen mode

Where action can be:

  • ADD COLUMN column_name data_type – Add a new column.
  • DROP COLUMN column_name – Remove an existing column.
  • MODIFY COLUMN column_name new_data_type – Change a column’s data type.
  • CHANGE COLUMN old_name new_name new_data_type – Rename a column.
  • RENAME TO new_table_name – Rename the table.
  • ADD CONSTRAINT or DROP CONSTRAINT – Manage constraints.

3. Adding Columns to a Table

Adding a Single Column

ALTER TABLE Employees
ADD COLUMN age INT;
Enter fullscreen mode Exit fullscreen mode

Adding Multiple Columns

ALTER TABLE Employees
ADD COLUMN address VARCHAR(255),
ADD COLUMN phone_number VARCHAR(15);
Enter fullscreen mode Exit fullscreen mode

4. Dropping Columns from a Table

Dropping a Single Column

ALTER TABLE Employees
DROP COLUMN age;
Enter fullscreen mode Exit fullscreen mode

Dropping Multiple Columns

ALTER TABLE Employees
DROP COLUMN address,
DROP COLUMN phone_number;
Enter fullscreen mode Exit fullscreen mode

5. Modifying Columns in a Table

Changing Data Type

ALTER TABLE Employees
MODIFY COLUMN salary DECIMAL(12,2);
Enter fullscreen mode Exit fullscreen mode

Changing Default Value

ALTER TABLE Employees
ALTER COLUMN salary SET DEFAULT 5000;
Enter fullscreen mode Exit fullscreen mode

Removing Default Value

ALTER TABLE Employees
ALTER COLUMN salary DROP DEFAULT;
Enter fullscreen mode Exit fullscreen mode

6. Renaming a Column or Table

Renaming a Column

ALTER TABLE Employees
CHANGE COLUMN name full_name VARCHAR(100);
Enter fullscreen mode Exit fullscreen mode

Renaming a Table

ALTER TABLE Employees
RENAME TO Staff;
Enter fullscreen mode Exit fullscreen mode

7. Adding and Removing Constraints

7.1 PRIMARY KEY Constraint

Adding a PRIMARY KEY (Single Column)

ALTER TABLE Employees
ADD PRIMARY KEY (employee_id);
Enter fullscreen mode Exit fullscreen mode

Adding a PRIMARY KEY (Multiple Columns)

ALTER TABLE Employees
ADD CONSTRAINT pk_emp PRIMARY KEY (employee_id, department_id);
Enter fullscreen mode Exit fullscreen mode

Removing a PRIMARY KEY

ALTER TABLE Employees
DROP PRIMARY KEY;
Enter fullscreen mode Exit fullscreen mode

7.2 UNIQUE Constraint

Adding a UNIQUE Constraint (Single Column)

ALTER TABLE Employees
ADD CONSTRAINT unique_email UNIQUE (email);
Enter fullscreen mode Exit fullscreen mode

Adding a UNIQUE Constraint (Multiple Columns)

ALTER TABLE Employees
ADD CONSTRAINT unique_emp UNIQUE (first_name, last_name, department_id);
Enter fullscreen mode Exit fullscreen mode

Removing a UNIQUE Constraint

ALTER TABLE Employees
DROP INDEX unique_email;
Enter fullscreen mode Exit fullscreen mode

7.3 FOREIGN KEY Constraint

Adding a FOREIGN KEY (Single Column)

ALTER TABLE Employees
ADD CONSTRAINT fk_department FOREIGN KEY (department_id) REFERENCES Departments(department_id);
Enter fullscreen mode Exit fullscreen mode

Adding a FOREIGN KEY (Multiple Columns)

ALTER TABLE Employees
ADD CONSTRAINT fk_project FOREIGN KEY (project_id, department_id) 
REFERENCES Projects(project_id, department_id);
Enter fullscreen mode Exit fullscreen mode

Removing a FOREIGN KEY

ALTER TABLE Employees
DROP FOREIGN KEY fk_department;
Enter fullscreen mode Exit fullscreen mode

7.4 CHECK Constraint

Adding a CHECK Constraint (Single Column)

ALTER TABLE Employees
ADD CONSTRAINT chk_salary CHECK (salary > 0);
Enter fullscreen mode Exit fullscreen mode

Adding a CHECK Constraint with Another Column

ALTER TABLE Employees
ADD CONSTRAINT chk_bonus CHECK (bonus <= salary * 0.2);
Enter fullscreen mode Exit fullscreen mode

Adding a CHECK Constraint (Multiple Conditions)

ALTER TABLE Employees
ADD CONSTRAINT chk_work_hours CHECK (work_hours BETWEEN 20 AND 60);
Enter fullscreen mode Exit fullscreen mode

Removing a CHECK Constraint

ALTER TABLE Employees
DROP CONSTRAINT chk_salary;
Enter fullscreen mode Exit fullscreen mode

7.5 DEFAULT Constraint

Adding a DEFAULT Constraint (Single Column)

ALTER TABLE Employees
ALTER COLUMN status SET DEFAULT 'Active';
Enter fullscreen mode Exit fullscreen mode

Adding a DEFAULT Constraint Based on Another Column

Note: Some databases support computed columns, but for direct reference-based defaults, you might need triggers instead.

ALTER TABLE Employees
ALTER COLUMN bonus_percentage SET DEFAULT 0.05;
Enter fullscreen mode Exit fullscreen mode

Removing a DEFAULT Constraint

ALTER TABLE Employees
ALTER COLUMN status DROP DEFAULT;
Enter fullscreen mode Exit fullscreen mode

Summary of ALTER TABLE Commands

Action Command
Add Column ALTER TABLE table_name ADD COLUMN column_name data_type;
Drop Column ALTER TABLE table_name DROP COLUMN column_name;
Modify Column ALTER TABLE table_name MODIFY COLUMN column_name new_data_type;
Rename Column ALTER TABLE table_name CHANGE COLUMN old_name new_name new_data_type;
Rename Table ALTER TABLE table_name RENAME TO new_table_name;
Add Constraint ALTER TABLE table_name ADD CONSTRAINT constraint_name;
Drop Constraint ALTER TABLE table_name DROP CONSTRAINT constraint_name;

Conclusion

The ALTER TABLE statement in MySQL is an essential tool for modifying table structures dynamically. It allows you to add, remove, rename, and modify columns, apply constraints, and change table properties efficiently. Understanding these operations enables you to handle database schema changes effectively.

Top comments (0)