Mysql Alter Table

MySQL ALTER TABLE Commands: How to Add, Delete, & Change Columns

Written by: Ryan Frankel

Ryan Frankel

Ryan began developing websites in the late '90s and has personally tested just about every web host and cloud platform worth trying on the market today. With a masters degree in electrical and computer engineering from the University of Florida, he leverages his extensive knowledge of hardware, software, and their engineering relationship to inform HostingAdvice readers of the technical implications of their hosting choices. Ryan's subject matter expertise includes, but is not limited to, WordPress, cloud infrastructure management, product UI/UX design, and popular web development languages such as JavaScript and PHP.

See full bio »

Edited by: Lillian Castro

Lillian Castro

Lillian brings more than 30 years of editing and journalism experience to our team. She has written and edited for major news organizations, including The Atlanta Journal-Constitution and the New York Times, and she previously served as an adjunct instructor at the University of Florida. Today, she edits HostingAdvice content for clarity, accuracy, and reader engagement.

See full bio »

MySQL (and MariaDB) allows you to change the structure of tables with the ALTER TABLE SQL command. Using the command, you can easily change the name of your table and columns, add or delete columns, or change the type of existing columns. Let’s see this in action.

Uses and Examples of ALTER TABLE

First, let’s create a database and a table, which we’ll respectively name “test” and “employees.” Here’s how you’d do that:

mysql -u root -p  CREATE DATABASE test;  USE test;  CREATE TABLE employees ( id int NOT NULL, name varchar(255) );

Rename a Table

The syntax for renaming a table is:

ALTER TABLE table1 RENAME table2;

So, to change our employees table to “users,” execute the following:

ALTER TABLE employees RENAME users;

Helpful hint: ALTER TABLE on its own does nothing. Start with the command and the table name, then specify the alterations to be made.

Add a Column and Change Column Properties

The syntax for adding a column to a table is:

ALTER TABLE tablename ADD columnname datatype

To remove or delete a column:

ALTER TABLE tablename DROP COLUMN columname;

Here, we will add a string column called “address” by typing:

ALTER TABLE users ADD COLUMN address varchar(10);

Add a TIMESTAMP column named “date” by entering the following command:

ALTER TABLE users ADD date TIMESTAMP;  

Add an index on the column named “id” by running:

ALTER TABLE users ADD INDEX (id);

It is also possible to do multiple additions at once:

ALTER TABLE users ADD uid INT UNSIGNED NOT NULL AUTO_INCREMENT, ADD UNIQUE (uid);

Our table should now look like this:

mysql> DESCRIBE users;  +---------+------------------+------+-----+-------------------+-----------------------------+  | Field | Type | Null | Key | Default | Extra |  +---------+------------------+------+-----+-------------------+-----------------------------+  | id | int(11) | NO | MUL | NULL | |  | name | varchar(255) | YES | | NULL | |  | address | varchar(10) | YES | | NULL | |  | date | timestamp | NO | | CURRENTTIMESTAMP | on update CURRENTTIMESTAMP |  | uid | int(10) unsigned | NO | PRI | NULL | auto_increment |  +---------+------------------+------+-----+-------------------+-----------------------------+

Modify a Column Type

The column modification syntax is:

ALTER TABLE tablename MODIFY COLUMN columnname datatype;

To modify the address field to allow for larger strings:

ALTER TABLE users MODIFY address VARCHAR(255);

We can also combine multiple modifications at once:

ALTER TABLE users MODIFY address VARCHAR(255), CHANGE name lastname VARCHAR(255) NOT NULL;

With this command, we also changed the column called “name” to “lastname” and disallowed NULL values for it.

Changing the Default Column Value

To change the default value on a column, use the SET DEFAULT syntax:

ALTER TABLE users ALTER address SET DEFAULT 'unknown';

Our final table now looks like this:

mysql> DESCRIBE users;  +----------+------------------+------+-----+-------------------+-----------------------------+  | Field | Type | Null | Key | Default | Extra |  +----------+------------------+------+-----+-------------------+-----------------------------+  | id | int(11) | NO | MUL | NULL | |  | lastname | varchar(255) | NO | | NULL | |  | address | varchar(255) | YES | | unknown | |  | date | timestamp | NO | | CURRENTTIMESTAMP | on update CURRENTTIMESTAMP |  | uid | int(10) unsigned | NO | PRI | NULL | auto_increment |  +----------+------------------+------+-----+-------------------+-----------------------------+

Why Should You Use ALTER TABLE?

Making changes to a MySQL database structure via the command line and ALTER TABLE can sometimes be faster and more flexible than using PHPMyAdmin or similar GUI tools.

The command offers even more features that we didn’t cover here. For more information, check out the MySQL documentation or ask a question down in the comments section.

Advertiser Disclosure

HostingAdvice.com is a free online resource that offers valuable content and comparison services to users. To keep this resource 100% free, we receive compensation from many of the offers listed on the site. Along with key review factors, this compensation may impact how and where products appear across the site (including, for example, the order in which they appear). HostingAdvice.com does not include the entire universe of available offers. Editorial opinions expressed on the site are strictly our own and are not provided, endorsed, or approved by advertisers.

Our Editorial Review Policy

Our site is committed to publishing independent, accurate content guided by strict editorial guidelines. Before articles and reviews are published on our site, they undergo a thorough review process performed by a team of independent editors and subject-matter experts to ensure the content’s accuracy, timeliness, and impartiality. Our editorial team is separate and independent of our site’s advertisers, and the opinions they express on our site are their own. To read more about our team members and their editorial backgrounds, please visit our site’s About page.

ABOUT THE AUTHOR

Ryan Frankel has been a professional in the tech industry for more than 20 years and has been developing websites for more than 25. With a master's degree in electrical and computer engineering from the University of Florida, he has a fundamental understanding of hardware systems and the software that runs them. Ryan now sits as the CTO of Digital Brands Inc. and manages all of the server infrastructure of their websites, as well as their development team. In addition, Ryan has a passion for guitars, good coffee, and puppies.

« BACK TO: HOW-TO
Follow the Experts
We Know Hosting

$

4

8

,

2

8

3

spent annually on web hosting!

Hosting How-To Guides