5154

Good Luck To You!

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

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

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

主键约束(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

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2025年12月    »
1234567
891011121314
15161718192021
22232425262728
293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接

    Powered By Z-BlogPHP 1.7.3

    Copyright Your WebSite.Some Rights Reserved.