数据库约束具体语法怎么写?不同约束类型示例有哪些?

数据库约束是关系型数据库中确保数据完整性和一致性的重要机制,它们通过定义规则来限制表中数据的取值范围、格式或关联关系,从而防止无效或错误数据的插入、更新或删除,合理使用数据库约束能够显著提升数据质量,减少应用程序层的校验逻辑,以下是几种常见约束的写法及其应用场景。

数据库约束具体语法怎么写?不同约束类型示例有哪些?

主键约束(PRIMARY KEY)

主键约束用于唯一标识表中的每一行记录,其值必须唯一且不能为空,每个表只能有一个主键,但可以由多个列组合而成(复合主键),在创建表时定义主键的语法如下:

CREATE TABLE 表名 (
    列名1 数据类型 PRIMARY KEY,
    列名2 数据类型,
    ...
);

若需修改已存在的表添加主键,可使用:

ALTER TABLE 表名 ADD PRIMARY KEY (列名);

用户表中的user_id通常作为主键:

CREATE TABLE users (
    user_id INT AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(50) NOT NULL
);

AUTO_INCREMENT(MySQL)或IDENTITY(SQL Server)可自动生成唯一递增的数值。

唯一约束(UNIQUE)

唯一约束确保某列或列组合的值在表中唯一,但允许有空值(空值不参与唯一性比较),一个表可定义多个唯一约束,语法与主键类似:

CREATE TABLE 表名 (
    列名1 数据类型,
    列名2 数据类型 UNIQUE,
    ...
);

或通过ALTER TABLE添加:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 UNIQUE (列名);

邮箱地址通常需要唯一:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE
);

非空约束(NOT NULL)

非空约束强制列必须包含值,不允许为空,可在创建表时直接定义列的NOT NULL属性:

CREATE TABLE 表名 (
    列名 数据类型 NOT NULL,
    ...
);

或修改表结构:

数据库约束具体语法怎么写?不同约束类型示例有哪些?

ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL;

用户名通常不能为空:

CREATE TABLE users (
    username VARCHAR(50) NOT NULL
);

默认约束(DEFAULT)

默认约束为列指定默认值,当插入数据时未提供该列的值,则自动使用默认值,语法如下:

CREATE TABLE 表名 (
    列名 数据类型 DEFAULT 默认值,
    ...
);

或通过ALTER TABLE添加:

ALTER TABLE 表名 ALTER 列名 SET DEFAULT 默认值;

用户注册时间默认为当前时间:

CREATE TABLE users (
    register_time DATETIME DEFAULT CURRENT_TIMESTAMP
);

检查约束(CHECK)

检查约束用于限制列的值必须满足特定条件,例如年龄必须大于0,语法如下:

CREATE TABLE 表名 (
    列名 数据类型 CHECK (条件表达式),
    ...
);

或添加命名检查约束:

ALTER TABLE 表名 ADD CONSTRAINT 约束名 CHECK (条件);

年龄范围限制:

CREATE TABLE users (
    age INT CHECK (age > 0 AND age <= 120)
);

外键约束(FOREIGN KEY)

外键约束用于建立两个表之间的关联关系,确保子表(从表)的引用列值在父表(主表)的列中存在,或为空,语法如下:

CREATE TABLE 子表 (
    列名 数据类型,
    FOREIGN KEY (列名) REFERENCES 父表(列名)
);

或通过ALTER TABLE添加:

数据库约束具体语法怎么写?不同约束类型示例有哪些?

ALTER TABLE 子表 ADD CONSTRAINT 约束名 FOREIGN KEY (列名) REFERENCES 父表(列名);

订单表引用用户表:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

外键还可定义ON DELETEON UPDATE动作(如CASCADESET NULL)来处理级联操作。

数据库约束是保障数据可靠性的基石,开发者应根据业务需求合理选择约束类型,主键和唯一约束维护唯一性,非空约束确保必填字段,默认约束简化数据插入,检查约束限制数据范围,外键约束维护表间关联,在定义约束时,需注意性能影响,例如外键约束可能降低写入速度,但能显著减少数据不一致问题。


相关问答FAQs

Q1: 主键约束和唯一约束有什么区别?
A1: 主键约束(PRIMARY KEY)要求列值唯一且不能为空,每个表只能有一个主键;而唯一约束(UNIQUE)仅要求值唯一,允许有空值,且一个表可定义多个唯一约束,主键通常用于标识记录,而唯一约束常用于业务上需要唯一标识的字段(如邮箱、身份证号)。

Q2: 如何删除或修改已存在的约束?
A2: 删除约束需通过ALTER TABLE语句,语法为ALTER TABLE 表名 DROP CONSTRAINT 约束名(MySQL中主键约束为DROP PRIMARY KEY),修改约束通常需先删除旧约束,再添加新约束,修改列的非空约束需先删除NOT NULL(若存在),再重新添加:

ALTER TABLE 表名 MODIFY 列名 数据类型 NULL; -- 删除NOT NULL
ALTER TABLE 表名 MODIFY 列名 数据类型 NOT NULL; -- 添加NOT NULL

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

(0)
热舞的头像热舞
上一篇 2025-11-14 11:30
下一篇 2025-11-14 11:36

相关推荐

  • 大数据比赛网站建设_数据集市建设

    大数据比赛网站建设,数据集市建设,需要从数据采集、清洗、存储、分析等方面入手,构建一个完整的数据生态系统。

    2024-06-21
    0011
  • 服务器内存一直增加直至死机怎么办,是什么原因导致的?

    服务器内存持续攀升直至耗尽导致死机,其核心症结往往不在于硬件本身,而在于系统层面的资源管理失控,最常见且最根本的原因,通常指向应用程序的内存泄漏、不合理的缓存策略或遭受恶意网络攻击,解决这一问题必须遵循“监控定位—隔离分析—修复优化”的闭环逻辑,盲目重启服务器只能暂时缓解,无法根除隐患,甚至会导致业务数据的永久……

    2026-03-13
    009
  • access如何导出mysql文件?,转mysql工具哪个好

    将Access数据库完整导出为MySQL文件,最稳妥的做法是借助SQL Server Migration Assistant for Access(SSMA)或专业的数据库迁移工具如Navicat,通过格式转换和结构映射实现无缝迁移,access导出mysql数据库文件的完整步骤使用SSMA 导出mysql 数……

    2026-07-27
    002
  • CSGO跨服务器怎么玩?不同区服账号互通吗?

    在《CS:GO》这款经典射击游戏中,跨服务器功能一直是玩家们关注的热点话题,随着游戏社区的发展,玩家们不再满足于单一服务器的对战体验,而是渴望与更多地区的对手一较高下,跨服务器功能的出现,正是为了满足这一需求,它打破了地域限制,让全球玩家能够汇聚在同一片战场上,什么是跨服务器功能?跨服务器功能,就是允许不同服务……

    2025-11-20
    0014

发表回复

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

广告合作

QQ:14239236

在线咨询: QQ交谈

邮件:asy@cxas.com

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

关注微信