MySQL DEFAULT Constraint
Last Updated :
18 Mar, 2024
The MySQL DEFAULT constraint returns the default value for a table column. The DEFAULT value of a column is a value used in the case, when there is no value specified by the user.
To use this function there should be a DEFAULT value assigned to the column. Otherwise, it will generate an error.
Syntax
DEFAULT (column_name)
Where, column_name: Name of column whose default value is written.
How to Add DEFAULT CONSTRAINT
To add a DEFAULT constraint to a MySQL table, there are two methods available.
- Using CREATE TABLE Statement
- Using ALTER TABLE Statement
We can use these methods depending on whether we are creating a new table, or updating a existing table.
Using DEFAULT Constraint on CREATE TABLE
We can add a DEFAULT constraint while creating a table in MySQL.
Syntax
CREATE TABLE table_name (
column1 data_type DEFAULT default_value,
column2 data_type DEFAULT default_value, ... );
Example
CREATE TABLE customers (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255) NOT NULL,
email VARCHAR(255) DEFAULT 'example@domain.com',
city VARCHAR(50) DEFAULT 'Unknown'
);
Add DEFAULT Constraint with ALTER TABLE Statement
We can add DEFAULT Constraint to a already existing table using ALTER TABLE Statement.
Syntax
ALTER TABLE table_name ALTER column_name SET DEFAULT default_value;
Example
ALTER TABLE customers ALTER city SET DEFAULT 'New York';
DEFAULT Constraint Example
Let’s create a MySQL table “blog_posts”
CREATE TABLE blog_posts (
post_id INT AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(255) NOT NULL,
content TEXT NOT NULL,
published_date DATE DEFAULT CURRENT_DATE
);
Final Table:
Field |
Type |
Null |
Key |
Default |
Extra |
post_id |
int |
NO |
PRI |
NULL |
auto_increment |
title |
varchar(255) |
NO |
|
NULL |
|
content |
text |
NO |
|
NULL |
|
published_date |
date |
YES |
|
CURRENT_DATE |
|
In this table, we have set the publish_date value to default value of the current date using CURRENT_DATE. So if a new entry doesn’t provide value for publish_date column, MySQL will automatically take the current date.
Let’s try and insert new values into this table.
INSERT INTO
blog_posts (title, content)
VALUES
('My First Blog Post', 'Hello, world! This is my inaugural post.');
Output:
post_id |
title |
content |
published_date |
1 |
My First Blog Post |
Hello, world! This is my inaugural post. |
2023-03-12 |
Key TakeAways:
- Compatibility with Data Types: The default value must be compatible with the column’s data type.
- Expression Defaults (MySQL 8.0.13+): Starting from MySQL 8.0.13, you can use expressions as default values.
- Limitations on BLOB and TEXT Columns: Prior to MySQL 8.0.13, BLOB and TEXT columns cannot have a DEFAULT value due to their nature of storing large amounts of data. However, from MySQL 8.0.13 and onward, this restriction has been lifted for certain expressions like
CURRENT_TIMESTAMP
.
- NOT NULL Columns: If a column is set to NOT NULL without a DEFAULT value explicitly defined, and you try to insert a row without specifying a value for this column, MySQL will throw an error. Defining a DEFAULT value can prevent such errors.
Share your thoughts in the comments
Please Login to comment...