想学习数据库约束,主键外键等常见约束的SQL语法怎么写?

在数据库设计与管理的领域中,约束条件是维护数据完整性、准确性和一致性的核心机制,它们如同为数据表设定的规则,确保了存入数据库的数据符合预设的业务逻辑和格式要求,理解并熟练书写各类约束,是每一位数据库开发者和管理员必备的技能,本文将系统性地介绍数据库中常见的约束类型及其书写方式,帮助读者构建坚实可靠的数据库结构。

想学习数据库约束,主键外键等常见约束的SQL语法怎么写?

主键约束

主键约束是数据库中最重要也是最基础的约束之一,它唯一地标识表中的每一行记录,并确保其值不能为空(NOT NULL),一个表只能有一个主键,但主键可以由一个或多个列(复合主键)组成。

在创建表时定义主键,可以直接在列定义后声明,也可以在表定义的末尾声明。

语法示例:

-- 方式一:在列定义时直接指定
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);
-- 方式二:在表定义末尾指定,便于定义复合主键
CREATE TABLE order_items (
    order_id INT,
    product_id INT,
    quantity INT,
    PRIMARY KEY (order_id, product_id)
);

对于已存在的表,可以通过 ALTER TABLE 语句添加主键。

ALTER TABLE departments
ADD PRIMARY KEY (department_id);

外键约束

外键约束用于在两个表之间建立链接,强制实现引用完整性,它指向另一个表的主键,确保一个表中的外键值必须是其所引用表中已存在的值,或者为 NULL。

外键定义了“父表”(被引用的表)和“子表”(包含外键的表)之间的关系。

语法示例:

-- 创建父表
CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(100) NOT NULL
);
-- 创建子表,并定义外键
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
);

外键还支持级联操作,用于定义当父表记录被更新或删除时,子表记录的行为。

  • ON DELETE CASCADE:当父表记录被删除时,子表中所有引用该记录的行也会被自动删除。
  • ON UPDATE CASCADE:当父表主键值被更新时,子表中所有引用该值的外键值也会被自动更新。
  • ON DELETE RESTRICT(默认行为):如果子表中有记录引用父表记录,则禁止删除父表记录。
CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    department_id INT,
    FOREIGN KEY (department_id) REFERENCES departments(department_id)
    ON DELETE SET NULL -- 当部门被删除时,员工的department_id设为NULL
);

唯一约束

唯一约束确保一列或多列组合中的所有值都是唯一的,但它允许有一个 NULL 值(具体行为视数据库系统而定,如 MySQL 允许多个 NULL,而 SQL Server 只允许一个),当需要保证某列信息不重复,但该列又不是主键时,唯一约束非常有用,例如用户的邮箱或手机号。

想学习数据库约束,主键外键等常见约束的SQL语法怎么写?

语法示例:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    username VARCHAR(50) UNIQUE,
    email VARCHAR(100),
    CONSTRAINT uq_email UNIQUE (email) -- 使用命名约束
);

非空约束

非空约束非常简单,它强制规定某列在插入或更新记录时不能包含 NULL 值,这是保证数据质量的基本手段。

语法示例:

CREATE TABLE products (
    product_id INT PRIMARY KEY,
    product_name VARCHAR(100) NOT NULL,
    description TEXT
);
-- 为已存在的表添加非空约束(某些数据库语法可能不同)
ALTER TABLE products
ALTER COLUMN description SET NOT NULL;

检查约束

检查约束用于限制列中可以接受的值的范围,它允许你定义一个布尔表达式,插入或更新的数据必须使该表达式为真,这使得复杂的业务规则可以直接在数据库层面强制执行。

语法示例:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    name VARCHAR(100),
    age INT,
    salary DECIMAL(10, 2),
    CONSTRAINT chk_age CHECK (age >= 18),
    CONSTRAINT chk_salary CHECK (salary > 0)
);

在上例中,chk_age 确保员工年龄不小于18岁,chk_salary 确保薪资为正数。

默认约束

默认约束为列指定一个默认值,当插入新记录时,如果没有为该列提供值,数据库会自动使用默认值填充。

语法示例:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    order_date DATE DEFAULT CURRENT_DATE,
    status VARCHAR(20) DEFAULT 'Pending'
);

为了更直观地对比,下表小编总结了各类约束的核心信息:

想学习数据库约束,主键外键等常见约束的SQL语法怎么写?

约束类型 主要作用 典型语法示例
主键 (PRIMARY KEY) 唯一标识每一行,非空 id INT PRIMARY KEY
外键 (FOREIGN KEY) 链接两个表,保证引用完整性 FOREIGN KEY (dept_id) REFERENCES depts(id)
唯一 (UNIQUE) 保证列值唯一,允许一个NULL email VARCHAR(100) UNIQUE
非空 (NOT NULL) 确保列值不能为空 name VARCHAR(50) NOT NULL
检查 (CHECK) 限制列的取值范围 CHECK (price > 0)
默认 (DEFAULT) 为列提供默认值 status VARCHAR(20) DEFAULT 'Active'

相关问答 (FAQs)

主键和唯一约束有什么根本区别?

解答: 主要区别有三点:

  1. 唯一性数量:一个表只能有一个主键,但可以有多个唯一约束。
  2. NULL 值:主键列绝对不允许为 NULL,唯一约束列通常允许包含一个 NULL 值(具体行为取决于数据库系统,如 MySQL 允许多个 NULL,而 SQL Server 只允许一个)。
  3. 用途:主键是表的主要标识符,通常用于建立表间关系(作为外键引用),唯一约束更多用于防止业务逻辑上的重复信息,如邮箱、身份证号等。

如何修改或删除一个已经存在的约束?

解答: 可以使用 ALTER TABLE 语句配合 DROP CONSTRAINT 子句来删除约束,如果需要修改,通常的做法是先删除旧约束,再添加新的约束。

删除约束示例:

-- 删除名为 chk_salary 的检查约束
ALTER TABLE employees
DROP CONSTRAINT chk_salary;

修改约束(实际上是替换)示例:
假设我们要将 chk_age 的条件从 age >= 18 改为 age >= 21

-- 1. 删除旧约束
ALTER TABLE employees
DROP CONSTRAINT chk_age;
-- 2. 添加新约束
ALTER TABLE employees
ADD CONSTRAINT chk_age CHECK (age >= 21);

在执行这些操作时,如果约束没有命名,数据库系统会自动生成一个内部名称,你需要先查询系统表(如 information_schema)来找到这个名称,在创建约束时显式命名是一个良好的实践。

【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!

(0)
热舞的头像热舞
上一篇 2025-10-14 07:10
下一篇 2025-09-23 21:07

相关推荐

  • 服务器 安全卫士

    服务器安全卫士是一款专门用于保护服务器安全的软件,它能够实时监控服务器的运行状态,及时发现并处理各种安全威胁,确保服务器的稳定运行。

    2025-04-06
    005
  • 云数据库真的安全可靠吗?该如何配置才能有效防范风险?

    将数据库迁移至云端,已成为企业实现数字化转型、提升业务敏捷性的关键一步,云平台带来了弹性伸缩、成本优化等诸多优势,但同时也让数据安全这一核心议题变得愈发重要,保障云端数据库的安全,并非单一产品的堆砌,而是一个涉及技术、流程和策略的系统性工程,以下将从多个维度,深入阐述如何构建坚实的云端数据库安全防线,严守访问控……

    2025-10-10
    004
  • 何时能够使用CDN空投的18枚币?

    关于“cdn空投18币什么时候可以用”,这通常取决于具体的项目和平台规则。空投的代币或币种通常会在特定时间后解锁,具体时间可能在几分钟到几天不等。为了获得准确的信息,建议您直接查阅相关项目的官方公告、白皮书或联系项目团队以获取最准确的信息。,,以上回答是基于一般情况和假设提供的,并不针对任何具体项目或平台。如果您有关于某个具体项目或平台的疑问,请提供更多详细信息以便我为您提供更准确的答案。

    2024-10-08
    000
  • 二级域名搭建_搭建流程

    二级域名搭建流程包括:选择域名注册商、购买主域名、创建二级域名、配置DNS解析、设置网站内容,最后测试确保网站可正常访问。

    2024-07-17
    0019

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

QQ-14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信