欢迎光临韵绾网
详情描述

约束

它们是关系数据库设计和数据完整性的核心概念,但侧重点不同: 主要是一种标识机制,而约束 是一种强制规则的机制。键通常通过约束来实现。

一、键

键是表中用于唯一标识一条记录或建立表间关系的一列或多列的组合。

1. 主键
  • 定义:表中唯一标识每一行记录的列或列组合。
  • 特性
    • 唯一性:任意两行的主键值不能相同。
    • 非空性:主键列的值不能为 NULL
    • 一个表只能有一个主键
  • 作用:作为行的绝对标识,是大部分关联查询的根基。
  • 示例
    CREATE TABLE Students (
        StudentID INT PRIMARY KEY, -- 将StudentID列定义为主键
        Name VARCHAR(100),
        Email VARCHAR(100)
    );
    -- 或使用表级约束
    CREATE TABLE Students (
        StudentID INT,
        CourseID INT,
        Grade CHAR(2),
        PRIMARY KEY (StudentID, CourseID) -- 复合主键
    );
2. 外键
  • 定义:一个表(子表/引用表)中的一列或多列,其值必须匹配另一个表(父表/被引用表)的主键唯一键的值。
  • 作用强制保持表之间的引用完整性,定义一对多或多对多的关系。
  • 参照动作:当父表的记录被更新或删除时,可以定义子表的处理方式:
    • CASCADE:级联操作(父表删/改,子表同步删/改)。
    • SET NULL:将子表中的外键值设为 NULL
    • SET DEFAULT:将子表中的外键值设为默认值。
    • RESTRICT / NO ACTION:默认行为,如果子表有匹配记录,则禁止对父表的操作。
  • 示例
    CREATE TABLE Orders (
        OrderID INT PRIMARY KEY,
        CustomerID INT, -- 该列将作为外键
        OrderDate DATE,
        FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID)
            ON DELETE CASCADE -- 当客户被删除,其所有订单也被级联删除
    );
3. 候选键
  • 定义:表中所有可以唯一标识一行的列或列组合。一个表可以有多个候选键。
  • 与主键的关系:我们从所有候选键中选择一个作为主键,其余的都是备用键
  • 示例:在 Students 表中,StudentID(学号)和 Email(邮箱)如果都具备唯一且非空的特性,那么它们都是候选键。我们通常选择 StudentID 作为主键。
4. 超键
  • 定义:能够唯一标识一行记录的列集合。它可能包含不必要的列。
  • 与候选键的关系候选键是最小超键(即不含多余列的超键)。
  • 示例:在 Students(StudentID, Name, Email) 表中,(StudentID)(StudentID, Name)(Email)(StudentID, Email) 都是超键。但只有 (StudentID)(Email) 是候选键(最小超键)。
5. 代理键
  • 定义:一个与业务无关、纯粹为了充当主键而人工添加的列(通常是自增整数、GUID等)。
  • 作用:当没有合适的自然主键(如身份证号、订单号等业务字段)时使用。简单、高效、稳定。
  • 示例
    CREATE TABLE Products (
        ProductID INT IDENTITY(1,1) PRIMARY KEY, -- 自增代理键
        ProductCode VARCHAR(20) UNIQUE, -- 业务上的唯一编码
        ProductName VARCHAR(200)
    );
6. 自然键
  • 定义:使用业务中已存在的、有意义的属性作为主键(如身份证号、车牌号、ISBN号)。
  • 优缺点:有业务含义,但可能不稳定(如身份证号升位)、不够简单或长度不一。

二、约束

约束是应用于表列上的规则,用于限制其中可存储的数据,确保数据的准确性和可靠性

1. NOT NULL 约束
  • 作用:确保列不能存储 NULL 值。
  • 示例
    CREATE TABLE Employees (
        EmployeeID INT PRIMARY KEY,
        FirstName VARCHAR(50) NOT NULL, -- 必须提供
        LastName VARCHAR(50) NOT NULL,
        MiddleName VARCHAR(50) -- 可以为NULL
    );
2. UNIQUE 约束
  • 作用:确保列中的所有值都互不相同。
  • 与主键区别UNIQUE 约束允许有 NULL 值(但通常只允许一个 NULL,取决于DBMS实现)。
  • 示例
    ALTER TABLE Students
    ADD CONSTRAINT UQ_Student_Email UNIQUE (Email);
3. PRIMARY KEY 约束
  • 作用NOT NULL 约束和 UNIQUE 约束的组合。用于定义主键。
4. FOREIGN KEY 约束
  • 作用:如上文所述,用于定义外键,保证引用完整性。
5. CHECK 约束
  • 作用:确保列中的值满足指定的逻辑条件。
  • 示例
    CREATE TABLE Products (
        ProductID INT PRIMARY KEY,
        Price DECIMAL(10,2) CHECK (Price >= 0), -- 列级CHECK约束
        StockQuantity INT NOT NULL,
        CONSTRAINT CHK_Stock CHECK (StockQuantity >= 0 AND StockQuantity <= 1000) -- 表级CHECK约束
    );
6. DEFAULT 约束
  • 作用:当向表中插入数据时,如果未指定某列的值,则使用预定义的默认值。
  • 示例
    CREATE TABLE Orders (
        OrderID INT PRIMARY KEY,
        OrderDate DATE DEFAULT GETDATE(), -- 默认为当前系统日期
        Status VARCHAR(20) DEFAULT 'Pending'
    );

三、键与约束的关系与总结

特性 约束
本质 标识符,用于定位和关联数据。 规则,用于限制数据的有效性。
实现方式 键是通过约束PRIMARY KEY, UNIQUE, FOREIGN KEY)在数据库层面实现的。 约束是更广泛的概念,包含了定义键的规则,也包括其他数据规则(CHECK, NOT NULL, DEFAULT)。
目的 结构性和关系性。定义表的结构(主键)和表之间的关系(外键)。 数据完整性和一致性。确保数据符合业务逻辑和规则。
类比 书的目录和页码(用于快速定位和建立关联)。 书的出版规范(如不能有错别字、章节顺序正确、符合排版规则)。

简单来说:

  • 主键、外键、唯一键 既是“键”的概念,也是通过“约束”来实现的。
  • NOT NULL, CHECK, DEFAULT 只是“约束”,它们不定义键,只定义数据规则。
  • 你可以没有主键创建一个表(虽然不推荐),但你可以为这个表添加 NOT NULLCHECK 约束。

在实际的 SQL 语句中,你通常是在创建表修改表时,通过 CONSTRAINT 关键字来声明这些键和约束,数据库系统则会负责强制执行它们。

相关帖子
有炎症不能摘除宫颈息肉
有炎症不能摘除宫颈息肉
Tomcat添加JMS远程监控的代码示例
Tomcat添加JMS远程监控的代码示例
人工智能技术的普及,在企业的数字化转型过程中扮演了什么样的关键角色?
人工智能技术的普及,在企业的数字化转型过程中扮演了什么样的关键角色?
孝感市建筑资质代办-专业公司注册代办,专业代办,收费合理
孝感市建筑资质代办-专业公司注册代办,专业代办,收费合理
孝感市商标注册|公司执照代办服务,专业代办,不成功不收费!
孝感市商标注册|公司执照代办服务,专业代办,不成功不收费!
丽水市公司注销办理-公司执照代办,服务好,收费合理
丽水市公司注销办理-公司执照代办,服务好,收费合理
济源市ISO9001认证|专业注册公司服务,经验丰富,不成功不收费
济源市ISO9001认证|专业注册公司服务,经验丰富,不成功不收费
2026年主流扫地机器人的AI避障技术,能否真正做到不缠绕数据线?
2026年主流扫地机器人的AI避障技术,能否真正做到不缠绕数据线?
2026年,小区物业费的定价标准是由哪些主要因素共同决定的?
2026年,小区物业费的定价标准是由哪些主要因素共同决定的?
福州市品牌网站建设设计@苹果手机app开发,专业建站公司
福州市品牌网站建设设计@苹果手机app开发,专业建站公司
菏泽市卫生许可证代办电话-营业执照代办,专业代办服务
菏泽市卫生许可证代办电话-营业执照代办,专业代办服务
温州市公司地址变更代办电话-中小企业注册,本地代办公司,收费合理
温州市公司地址变更代办电话-中小企业注册,本地代办公司,收费合理
北京市公司地址变更代办|装修公司注册,一站式代办服务
北京市公司地址变更代办|装修公司注册,一站式代办服务
菏泽市商城网站建设设计@高效获客助手,优秀设计团队
菏泽市商城网站建设设计@高效获客助手,优秀设计团队
鹤壁市食品许可证代办|公司注册服务,欢迎电话咨询,不成功不收费
鹤壁市食品许可证代办|公司注册服务,欢迎电话咨询,不成功不收费
2026年针对大龄失业人员,失业保险的扶持政策有无新规?
2026年针对大龄失业人员,失业保险的扶持政策有无新规?
为家中不擅长使用智能手机的老年人,应当如何帮助他们申领和使用电子身份证?
为家中不擅长使用智能手机的老年人,应当如何帮助他们申领和使用电子身份证?
2026年家用便携式水质检测仪器的准确性与选购要点分析?
2026年家用便携式水质检测仪器的准确性与选购要点分析?
来宾市网站制作设计服务公司@定制化网站开发,收费标准
来宾市网站制作设计服务公司@定制化网站开发,收费标准