Skip to content

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 列的值,其他列使用默认值。
  • 第三条插入语句:指定了 nameagegender 列的值,gradeenrollment_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;

常用的默认值类型

  1. 常量值:如数字、字符串等。

    sql
    age INT DEFAULT 18
    grade VARCHAR(20) DEFAULT '高一'
  2. 系统函数:如当前日期、当前时间等。

    sql
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    enrollment_date DATE DEFAULT CURRENT_DATE
  3. 表达式:在某些数据库系统中,可以使用表达式作为默认值。

    sql
    -- MySQL 中可以使用表达式
    price DECIMAL(10,2) DEFAULT 0.00

注意事项

  1. NULL 值:如果列没有 DEFAULT 约束,且没有指定 NOT NULL 约束,则默认值为 NULL。

  2. 数据类型:默认值的数据类型必须与列的数据类型兼容。

  3. 函数支持:不同数据库系统支持的默认值函数可能不同。例如:

    • MySQL:CURRENT_TIMESTAMPCURRENT_DATE
    • SQL Server:GETDATE()GETUTCDATE()
    • PostgreSQL:NOW()CURRENT_DATE
  4. 性能影响:DEFAULT 约束对性能的影响很小,因为它只是在插入数据时提供一个默认值。

  5. AUTO_INCREMENT:在 MySQL 中,AUTO_INCREMENT 是一种特殊的默认值机制,用于自动生成递增的整数。

小结

SQL DEFAULT 约束是一种用于为列设置默认值的约束。当向表中插入数据时,如果没有为该列指定值,将使用默认值。DEFAULT 约束可以设置常量值、系统函数或表达式作为默认值。通过使用 DEFAULT 约束,可以减少插入数据时需要指定的列数,提高数据插入的效率和一致性。