Skip to content
约束
引用完整性
主键
  • 任意两行的主键值都不相同
  • 每行都具有一个主键值(列中不允许出现NULL)
  • 包含主键的列从不修改或更新
  • 主键值不能重用。如果从表中删除某一行,其主键值不分配给新行
sql

CREATE TABLE Vendors 
(
  vend_id      CHAR(10)      NOT NULL PRIMARY KEY,
  vend_name    CHAR(50)      NOT NULL
  vend_address CHAR(50)      NULL,
  vend_city    CHAR(50)      NULL,
  vend_state   CHAR(5)       NULL,
  vend_zip     CHAR(10)      NULL,
  vend_country CHAR(50)      NULL
)
sql

ALTER TABLE Vendors
ADD CONSTRAINT PRIMARY KEY (vend_id);
外键

表中一列,值在另一表中是主键

sql

CREATE TABLE Orders 
(
  order_num        INTEGER        NOT NULL PRIMARY KEY,
  order_date       DATETIME       NOT NULL,
  cust_id          CHAR(10)       NOT NULL REFERENCES Customers(cust_id) 
);
sql

ALTER TABLE Orders
ADD CONSTRAINT
FOREIGN KEY (cust_id) REFERENCES Customers(cust_id);
唯一约束

保证一列或一组列中的数据是唯一的,类似于主键,区别如下:

  • 表可以包含多个唯一约束,但每个表只允许1个主键
  • 唯一约束列可以包含NULL值
  • 唯一约束列可以修改和更新
  • 唯一约束列的值可重复使用
  • 与主键不一样,唯一约束不能用来定义外键

可以使用关键字UNIQUECONSTRAINT定义

检查约束

用来保证一列中的数据满足一组指定条件

sql

CREATE TABLE OrderItems 
(
  order_num      INTEGER      NOT NULL,
  order_item     INTEGER      NOT NULL,
  prod_id        CHAR(10)     NOT NULL,
  quantity       INTEGER      NOT NULL CHECK (quantity > 0),
  item_price     MONEY        NOT NULL
);
sql
ADD CONSTRAINT CHECK (gender LIKE '[MF]');
索引

索引用来排序数据以加快搜索和排序操作的速度
通过在列上定义索引来加快查找的速度

  • 索引加快了检索性能,降低了插入、修改和删除的性能(因为要动态更新索引)
  • 索引数据可能会大量占用存储空间
  • 不是所有列适合做索引,经常要排序的列适合做索引,索引可以同时定义多个列
sql

CREATE INDEX prod_name_ind
ON Products (prod_name);
触发器TRIGGER

特定数据库活动自动执行的存储过程