image

编辑人: 舍溪插画

calendar2025-07-25

message0

visits60

数据库表级约束与列级约束选择

在数据库设计中,约束是确保数据完整性和一致性的关键工具。约束可以分为列级约束(COLUMN CONSTRAINT)和表级约束(TABLE CONSTRAINT)。本文将详细介绍这两种约束的区别及其使用场景,并通过示例演示其语法。

列级约束(COLUMN CONSTRAINT)

列级约束是直接在列定义时指定的约束。它们适用于单个列的数据完整性要求。常见的列级约束包括:

  1. NOT NULL:确保列中的值不能为空。
  2. UNIQUE:确保列中的所有值都是唯一的。
  3. PRIMARY KEY:确保列中的值是唯一的,并且该列不能为空。
  4. DEFAULT:为列中的值提供一个默认值。
  5. CHECK:确保列中的值满足特定的条件。

示例

CREATE TABLE Employees (
    EmployeeID INT PRIMARY KEY,
    FirstName VARCHAR(50) NOT NULL,
    LastName VARCHAR(50) NOT NULL,
    Email VARCHAR(100) UNIQUE,
    HireDate DATE DEFAULT CURRENT_DATE,
    Salary DECIMAL(10, 2) CHECK (Salary > 0)
);

在这个示例中,EmployeeID 是主键,FirstNameLastName 不能为空,Email 必须唯一,HireDate 有默认值,Salary 必须大于零。

表级约束(TABLE CONSTRAINT)

表级约束是在整个表级别定义的约束。它们适用于涉及多个列的数据完整性要求。常见的表级约束包括:

  1. PRIMARY KEY:可以定义在多个列上。
  2. UNIQUE:可以定义在多个列上。
  3. FOREIGN KEY:确保一个表中的列值与另一个表中的列值匹配。
  4. CHECK:可以定义在多个列上。

示例

CREATE TABLE Orders (
    OrderID INT PRIMARY KEY,
    CustomerID INT,
    OrderDate DATE DEFAULT CURRENT_DATE,
    TotalAmount DECIMAL(10, 2) CHECK (TotalAmount >= 0),
    CONSTRAINT FK_Orders_Customers FOREIGN KEY (CustomerID) REFERENCES Customers(CustomerID),
    CONSTRAINT UQ_Orders_OrderDate_CustomerID UNIQUE (OrderDate, CustomerID)
);

在这个示例中,OrderID 是主键,TotalAmount 必须大于等于零,CustomerID 是外键,引用 Customers 表中的 CustomerID 列,OrderDateCustomerID 的组合必须是唯一的。

多字段约束

多字段约束必须使用表级约束,因为它们涉及多个列。例如,定义一个复合主键或复合唯一约束时,必须使用表级约束。

示例

CREATE TABLE OrderDetails (
    OrderID INT,
    ProductID INT,
    Quantity INT CHECK (Quantity > 0),
    PRIMARY KEY (OrderID, ProductID),
    FOREIGN KEY (OrderID) REFERENCES Orders(OrderID),
    FOREIGN KEY (ProductID) REFERENCES Products(ProductID)
);

在这个示例中,OrderIDProductID 的组合是主键,并且 Quantity 必须大于零。

总结

  • 列级约束适用于单个列的数据完整性要求。
  • 表级约束适用于涉及多个列的数据完整性要求,特别是多字段约束。
  • 在设计数据库时,选择合适的约束类型可以确保数据的完整性和一致性。

通过本文的介绍和示例,希望你能更好地理解数据库表级约束与列级约束的区别及其使用方法,从而在实际项目中应用这些知识。

喵呜刷题:让学习像火箭一样快速,快来微信扫码,体验免费刷题服务,开启你的学习加速器!

创作类型:
原创

本文链接:数据库表级约束与列级约束选择

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。
分享文章
share