Appearance
SQL DEFAULT
SQL DEFAULT 约束用于为列设置默认值。当向表中插入数据时,如果没有为该列指定值,将使用默认值。
语法
创建表时添加 DEFAULT 约束
sql
CREATE TABLE table_name (
column1 datatype DEFAULT default_value,
column2 datatype DEFAULT default_value,
...
);表创建后添加 DEFAULT 约束
sql
ALTER TABLE table_name
ALTER column_name SET DEFAULT default_value;移除 DEFAULT 约束
sql
ALTER TABLE table_name
ALTER column_name DROP DEFAULT;示例
示例 1:创建表时添加 DEFAULT 约束
sql
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT DEFAULT 18,
grade VARCHAR(20) DEFAULT '高一',
gender VARCHAR(10) DEFAULT '未知',
enrollment_date DATE DEFAULT CURRENT_DATE
);执行结果:创建一个名为 students 的表,其中 age 列的默认值为 18,grade 列的默认值为 '高一',gender 列的默认值为 '未知',enrollment_date 列的默认值为当前日期。
示例 2:向有 DEFAULT 约束的表插入数据
sql
-- 插入所有列的数据
INSERT INTO students (name, age, grade, gender, enrollment_date)
VALUES ('张三', 19, '高三', '男', '2023-09-01');
-- 插入部分列的数据,未指定的列使用默认值
INSERT INTO students (name)
VALUES ('李四');
-- 插入部分列的数据,指定部分列的值
INSERT INTO students (name, age, gender)
VALUES ('王五', 17, '女');执行结果:
- 第一条插入语句:所有列都指定了值,使用指定的值。
- 第二条插入语句:只指定了
name列的值,其他列使用默认值。 - 第三条插入语句:指定了
name、age和gender列的值,grade和enrollment_date列使用默认值。
示例 3:表创建后添加 DEFAULT 约束
sql
-- 创建表
CREATE TABLE students (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50) NOT NULL,
age INT,
grade VARCHAR(20)
);
-- 添加 DEFAULT 约束到 age 列
ALTER TABLE students
ALTER age SET DEFAULT 18;
-- 添加 DEFAULT 约束到 grade 列
ALTER TABLE students
ALTER grade SET DEFAULT '高一';示例 4:移除 DEFAULT 约束
sql
-- 移除 age 列的 DEFAULT 约束
ALTER TABLE students
ALTER age DROP DEFAULT;常用的默认值类型
常量值:如数字、字符串等。
sqlage INT DEFAULT 18 grade VARCHAR(20) DEFAULT '高一'系统函数:如当前日期、当前时间等。
sqlcreated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP enrollment_date DATE DEFAULT CURRENT_DATE表达式:在某些数据库系统中,可以使用表达式作为默认值。
sql-- MySQL 中可以使用表达式 price DECIMAL(10,2) DEFAULT 0.00
注意事项
NULL 值:如果列没有 DEFAULT 约束,且没有指定 NOT NULL 约束,则默认值为 NULL。
数据类型:默认值的数据类型必须与列的数据类型兼容。
函数支持:不同数据库系统支持的默认值函数可能不同。例如:
- MySQL:
CURRENT_TIMESTAMP、CURRENT_DATE等 - SQL Server:
GETDATE()、GETUTCDATE()等 - PostgreSQL:
NOW()、CURRENT_DATE等
- MySQL:
性能影响:DEFAULT 约束对性能的影响很小,因为它只是在插入数据时提供一个默认值。
AUTO_INCREMENT:在 MySQL 中,
AUTO_INCREMENT是一种特殊的默认值机制,用于自动生成递增的整数。
小结
SQL DEFAULT 约束是一种用于为列设置默认值的约束。当向表中插入数据时,如果没有为该列指定值,将使用默认值。DEFAULT 约束可以设置常量值、系统函数或表达式作为默认值。通过使用 DEFAULT 约束,可以减少插入数据时需要指定的列数,提高数据插入的效率和一致性。