SQL 约束

约束是什么?

约束限制了字段的取值。约束提供了一种标准机制来维护表内数据的准确性和完整性。

SQL中有几种不同类型的约束,包括:

  • NOT NULL
  • PRIMARY KEY
  • UNIQUE
  • DEFAULT
  • FOREIGN KEY
  • CHECK (MySQL不支持)

现在,让我们详细讨论这些约束。

NOT NULL

NOT NULL约束表示字段不接受空值。

这意味着,如果对字段应用NOT NULL约束,插入新行时,该字段必须为非NULL值。

下面的SQL语句创建一个名为persons的表,该表有4个字段,其中3个字段idnamephone不接受空值。

示例

-- Syntax for MySQL Database 
CREATE TABLE persons (
    id INT NOT NULL,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

注意,NULL与zero(0)、blank或诸如””之类的零长度字符串不同,NULL表示没有生成任何条目。

PRIMARY KEY

主键约束表明该字段是主键。主键能唯一地标识表中的每一行。表中的任何两行都不能具有相同的主键值,此外,不能在主键列中输入NULL值。

下面的SQL语句创建一个名为persons的表,并指定id列作为主键。这意味着该字段不允许出现空值或重复值。

示例

-- Syntax for MySQL Database 
CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL
);

主键通常由表中的一个字段组成,但是也可以由多个字段组成主键,例如,雇员的电子邮件地址或ID是雇员表的逻辑主键。

UNIQUE

唯一性约束表示一个或多个字段组合在表中不能重复。

尽管唯一性约束和主键约束都强制唯一性,但主键还作为一行记录的标识。

下面的SQL语句创建一个名为persons的表,并将phone列指定为惟一的。这意味着该字段不允许重复。

示例

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE
);

可以在表上定义多个唯一性约束,但只能在表上定义一个主键约束。此外,与主键约束不同,唯一性允许空值。

DEFAULT

默认约束指定字段的默认值。

在执行INSERT语句时,没有给字段提供值,字段被设置为默认值。

下面的SQL语句为country字段指定一个默认值。

示例

CREATE TABLE persons (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    birth_date DATE,
    phone VARCHAR(15) NOT NULL UNIQUE,
    country VARCHAR(30) NOT NULL DEFAULT 'Australia'
);

如果您将一个字段定义为NOT NULL,同时为该字段指定了一个默认值,那么在INSERT语句中,不需要显式地为该列指定值。

FOREIGN KEY

外键(FK)是一个字段或字段组合,用于建立两个表中的数据之间的关系。

下面是一个示例图,展示了employeesdepartments表之间的关系。

如果仔细查看,您会注意到employees表的dept_id列与departments表的主键列匹配。因此,employees表的dept_id列是departments表的外键。

image

在MySQL中,创建表时可以通过定义外键约束来创建外键,如下所示。下面的语句在employees表的dept_id列上建立一个外键,该外键引用departments表的dept_id列。

示例

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT,
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

CHECK (MySQL不支持)

CHECK约束的作用是,对字段值作出限制。

例如,可以通过创建检查约束:只允许值从3,000到10,000,限制salary字段的值范围。这就防止了薪金超过正常薪金范围。

示例

CREATE TABLE employees (
    emp_id INT NOT NULL PRIMARY KEY,
    emp_name VARCHAR(55) NOT NULL,
    hire_date DATE NOT NULL,
    salary INT NOT NULL CHECK (salary >= 3000 AND salary <= 10000),
    dept_id INT,
    FOREIGN KEY (dept_id) REFERENCES departments(dept_id)
);

注意: MySQL不支持CHECK约束。CHECK子句会被解析,但是MySQL会忽略它。



浙ICP备17015664号 浙公网安备 33011002012336号 联系我们 网站地图  
@2019 qikegu.com 版权所有,禁止转载