约束条件是对表的数据列实施的一组规则。这些用于限制可以进入表的数据类型。它确保了SQL数据库中数据的准确性、完整性和可靠性。
SQL 约束条件
SQL约束是用来限制进入表的数据类型的规则,以保持表内数据的准确性和完整性。SQL中的约束用于确保数据的完整性在数据库中得到维护。
约束可以分为以下两种类型。
- 列级约束。只限制列的数据。
- 表级约束。限制整个表的数据。
请看以下最常用的约束,可以应用于表:
- 非空
- 一致性
- PRIMARY KEY
- FOREIGN KEY
- 检查
- 默认值
语法 非空 限制条件
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表的id 和 Name 字段不会取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 | 投资者_姓名 | 地址 |
|---|---|---|
| 101 | KRUNAL | 诺伊达 |
| 102 | ANKIT | 新德里 |
| 103 | 鲁沙巴 | 罗塔克 |
雇员
| e_id | 员工_年龄 | i_id |
|---|---|---|
| 10 | 26 | 101 |
| 11 | 24 | 103 |
| 12 | 26 | 102 |
在上述内容中,有两个表格。
- 投资者
- 雇员
上述两个表是通过名为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表添加外键约束。
删除时外键列的行为
当特定的记录从主表中删除时,有两种方法可以保持子表的数据完整性。首先,当两个表通过外键连接,主表中的特定数据被删除时,该记录存在于子表中,我们必须有一些机制来保存子表中的数据的完整性。
-
- **在删除级联中。**如果一个外键的值从主表中被删除,它将从子表中删除一条记录。
- 在删除空值时。它将把子表中的所有记录的值设置为NULL,因为主表中的外键值被删除了。
- 如果我们不使用上述任何一种方法,我们就不能从主表中删除子表中存在数据的数据。如果我们试图这样做,我们会得到一个错误。
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;
本教程到此结束。