SQL约束条件的详细指南

279 阅读5分钟

约束条件是对表的数据列实施的一组规则。这些用于限制可以进入表的数据类型。它确保了SQL数据库中数据的准确性、完整性和可靠性。

SQL 约束条件

SQL约束是用来限制进入表的数据类型的规则,以保持表内数据的准确性和完整性。SQL中的约束用于确保数据的完整性在数据库中得到维护。

约束可以分为以下两种类型。

  1. 列级约束。只限制列的数据。
  2. 表级约束。限制整个表的数据。

请看以下最常用的约束,可以应用于表:

  1. 非空
  2. 一致性
  3. PRIMARY KEY
  4. FOREIGN KEY
  5. 检查
  6. 默认值

语法 非空 限制条件

NOT NULL约束限制了列的NULL值。一旦NOT NULL约束被应用到列上,你就不能向该列传递空值。它强制要求该列包含一个适当的值。每张的该列中都不应该有空值。

一般来说,SQL表中的ID列包含NOT NULL约束。

请看下面这个NOT NULL约束的查询:

CREATE TABLE Singer (
 id int NOT NULL, 
 Name varchar(60) NOT NULL, 
 Song varchar(60)
);

上面的查询将声明Singer表的idName 字段不会取NULL值。

SQL PRIMARY KEY约束

我们在本博客中已经介绍了主键。主键是表中的一个字段,它用于唯一地识别表中的行。如果该列有一个主键约束,它将包含唯一的值,并且不会持有任何NULL值。

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

CREATE TABLE investors (
    id INT NOT NULL PRIMARY KEY,
    name VARCHAR(30) NOT NULL,
    portfolio amount INT,
    fund_name VARCHAR(50)
);

在上面的查询中,我们将创建投资者的表,其中id列是主键。你不能在主键列中添加NULL值。因此,id列现在有两个SQL约束。需要记住的一点是,主键的长度不能超过900字节。

SQL UNIQUE 约束

UNIQUE约束确保一个字段或列只具有唯一的值。UNIQUE约束的字段不会有任何重复的数据。唯一约束可以在列或表的层面上应用。

SQL UNIQUE 约束可以防止两条记录在一个列中拥有相同的值。

表一级的UNIQUE约束

这里我们有一个简单的CREATE查询来创建表,列app_id具有唯一值,请看下面的查询:

CREATE TABLE Apps(
  app_id int NOT NULL UNIQUE, 
  Name varchar(60), 
  Price int
);

列级的UNIQUE约束

在这里,我们必须使用Alter table查询,将Unique约束分配给一个特定的字段。

请看下面的查询:

ALTER TABLE Apps ADD UNIQUE(app_id);

上面的查询指定Apps表的app_id字段将只有一个唯一的值。

SQL外键约束

在这篇博客中,我们也介绍了外键约束。SQL外键是用来在两个表之间形成联系的,这使得它成为一个引用键。FOREIGN KEY是用来连接两个表的。

FOREIGN KEY约束也被用来限制破坏表间联系的行为。让我们在两个表的帮助下看看它的用途。

投资者

i_id投资者_姓名地址
101KRUNAL诺伊达
102ANKIT新德里
103鲁沙巴罗塔克

雇员

e_id员工_年龄i_id
1026101
1124103
1226102

在上述内容中,有两个表格。

  1. 投资者
  2. 雇员

上述两个表是通过名为i_id的外键连接的。

投资者表有一个叫i_id的主键**,而雇员表有一个叫i_id的外键

如果你试图插入不正确的数据,DBMS将返回错误,不允许你插入任何数据。

所以,它将防止添加任何恶意的值是操纵的值。当编辑、更新或删除这些表之间的数据时,你需要非常小心。

如果出了问题,整个系统将表现得不自然和有缺陷。

在表级使用 FOREIGN KEY 约束

请看下面的查询:

CREATE table Employees(
    e_id int PRIMARY KEY, 
    employee_age varchar(60) NOT NULL,
    i_id int FOREIGN KEY REFERENCES Investors(i_id)
);

所以,在上面的查询中,我们用i_id定义了表之间的关系。

Employees表中的i_id列 参考了Investors表。

在列级使用 FOREIGN KEY 约束

请看下面的查询:

ALTER table Employees 
ADD FOREIGN KEY (i_id) REFERENCES Investors(i_id);

我们使用了Alter查询来为Employees表添加外键约束。

删除时外键列的行为

当特定的记录从主表中删除时,有两种方法可以保持子表的数据完整性。首先,当两个表通过外键连接,主表中的特定数据被删除时,该记录存在于子表中,我们必须有一些机制来保存子表中的数据的完整性。

    1. **在删除级联中。**如果一个外键的值从主表中被删除,它将从子表中删除一条记录。
    2. 在删除空值时。它将把子表中的所有记录的值设置为NULL,因为主表中的外键值被删除了。
    3. 如果我们不使用上述任何一种方法,我们就不能从主表中删除子表中存在数据的数据。如果我们试图这样做,我们会得到一个错误。
ERROR : Record in child table exist

检查约束

CHECK约束是用来限制列的值在范围内的。

它在将值存储到数据库之前对其进行检查,这就像在将数据保存到该列之前检查条件一样。

在表一级使用CHECK约束

CREATE table Student(
    id int NOT NULL CHECK(id > 0),
    Name varchar(60) NOT NULL,
    Age int
);

上面的查询将限制id值大于0。

在列级使用CHECK约束

请看下面的查询:

ALTER table Student ADD CHECK(id > 0);

DEFAULT约束

INSERT INTO语句没有提供特定的值时,DEFAULT约束为一个列提供了默认值。

在表级使用DEFAULT约束

CREATE TABLE CUSTOMERS(
   ID   INT              NOT NULL,
   NAME VARCHAR (20)     NOT NULL,
   ADDRESS  CHAR (100) ,
   SALARY   DECIMAL (18, 2) DEFAULT 100000.00,       
   PRIMARY KEY (ID)
);

在列级使用DEFAULT约束

如果表已经被创建,我们可以使用Alter table语句来指定默认约束,请看下面的查询:

ALTER TABLE CUSTOMERS
ALTER SALARY SET DEFAULT 100000;

本教程到此结束。