插件窝 干货文章 SQL 如何添加带约束的新列

SQL 如何添加带约束的新列

约束 添加 ALTER TABLE 60    来源:    2025-03-29

在 SQL 中添加带约束的新列

在 SQL 中,您可以使用 ALTER TABLE 语句添加新列,并同时为该列定义约束。以下是几种常见的带约束添加新列的方法:

基本语法

ALTER TABLE 表名
ADD 列名 数据类型 [约束];

常见约束类型及示例

1. 添加 NOT NULL 约束

ALTER TABLE employees
ADD email VARCHAR(100) NOT NULL;

2. 添加 UNIQUE 约束

ALTER TABLE employees
ADD employee_code VARCHAR(10) UNIQUE;

3. 添加 PRIMARY KEY 约束

ALTER TABLE employees
ADD employee_id INT PRIMARY KEY;

4. 添加 FOREIGN KEY 约束

ALTER TABLE orders
ADD customer_id INT,
ADD CONSTRAINT fk_customer
FOREIGN KEY (customer_id) REFERENCES customers(id);

5. 添加 CHECK 约束

ALTER TABLE products
ADD price DECIMAL(10,2) CHECK (price > 0);

6. 添加 DEFAULT 约束

ALTER TABLE orders
ADD order_date DATE DEFAULT CURRENT_DATE;

多列添加约束

您也可以一次添加多个带约束的列:

ALTER TABLE employees
ADD (
    hire_date DATE NOT NULL,
    salary DECIMAL(10,2) CHECK (salary > 0),
    department_id INT,
    CONSTRAINT fk_department
    FOREIGN KEY (department_id) REFERENCES departments(id)
);

注意事项

  1. 对于现有表添加 NOT NULL 约束时,表中不能有数据,或者必须为新列提供默认值
  2. 添加约束可能会失败,如果现有数据违反新约束
  3. 不同数据库系统(MySQL, PostgreSQL, SQL Server等)的语法可能有细微差别

各数据库系统差异示例

MySQL/MariaDB

ALTER TABLE employees
ADD COLUMN phone VARCHAR(15) NOT NULL AFTER last_name;

PostgreSQL

ALTER TABLE employees
ADD COLUMN phone VARCHAR(15) NOT NULL;

SQL Server

ALTER TABLE employees
ADD phone VARCHAR(15) NOT NULL
CONSTRAINT DF_employees_phone DEFAULT 'N/A';

Oracle

ALTER TABLE employees
ADD (phone VARCHAR2(15) NOT NULL);

根据您使用的具体数据库系统,可能需要调整语法细节。