📜  SQL |约束

📅  最后修改于: 2021-09-10 01:23:59             🧑  作者: Mango

约束是我们可以应用于表中数据类型的规则。也就是说,我们可以使用约束来指定可以存储在表中特定列中的数据类型的限制。

SQL 中可用的约束是:

  • NOT NULL :此约束告诉我们不能在列中存储空值。也就是说,如果一列被指定为 NOT NULL,那么我们将不能再在这个特定的列中存储 null。
  • UNIQUE :当用列指定此约束时,它告诉列中的所有值必须是唯一的。也就是说,列中任何行中的值都不得重复。
  • PRIMARY KEY :主键是可以唯一标识表中每一行的字段。此约束用于将表中的字段指定为主键。
  • FOREIGN KEY :外键是一个字段,可以唯一标识另一个表中的每一行。此约束用于将字段指定为外键。
  • CHECK :此约束有助于验证列的值以满足特定条件。也就是说,它有助于确保存储在列中的值满足特定条件。
  • DEFAULT :当用户未指定值时,此约束为列指定默认值。

如何指定约束?
我们可以在创建表时使用 CREATE TABLE 语句指定约束。我们还可以在使用 ALTER TABLE 语句创建表后指定约束。

语法
以下是在创建表时使用 CREATE TABLE 语句创建约束的语法。

CREATE TABLE sample_table
(
column1 data_type(size) constraint_name,
column2 data_type(size) constraint_name,
column3 data_type(size) constraint_name,
....
);

sample_table: Name of the table to be created.
data_type: Type of data that can be stored in the field.
constraint_name: Name of the constraint. for example- NOT NULL, UNIQUE, PRIMARY KEY etc. 

让我们详细了解每个约束。

1. 非空 –
如果我们将表中的某个字段指定为 NOT NULL。那么该字段将永远不会接受空值。也就是说,如果没有为此字段指定任何值,则不允许在表中插入新行。
例如,下面的查询创建一个表 Student,其中字段 ID 和 NAME 为 NOT NULL。也就是说,每次我们希望插入新行时,我们都必须为这两个字段指定值。

CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
ADDRESS varchar(20)
);

2. 独特——
此约束有助于唯一标识表中的每一行。即对于特定列,所有行都应具有唯一值。我们可以在一张表中有多个 UNIQUE 列。
例如,以下查询创建一个表 Student,其中字段 ID 指定为 UNIQUE。即,没有两个学生可以拥有相同的 ID。详细的唯一约束。

CREATE TABLE Student
(
ID int(6) NOT NULL UNIQUE,
NAME varchar(10),
ADDRESS varchar(20)
);

3. 主键 –
主键是唯一标识表中每一行的字段。如果表中的某个字段作为主键,则该字段将不能包含 NULL 值,并且该字段的所有行都应具有唯一值。因此,换句话说,我们可以说这是 NOT NULL 和 UNIQUE 约束的组合。
一张表只能有一个字段作为主键。下面的查询将创建一个名为 Student 的表并指定字段 ID 作为主键。

CREATE TABLE Student
(
ID int(6) NOT NULL UNIQUE,
NAME varchar(10),
ADDRESS varchar(20),
PRIMARY KEY(ID)
);

4. 外键 –
外键是表中的一个字段,它唯一标识另一个表的每一行。也就是说,这个字段指向另一个表的主键。这通常会在表之间创建一种链接。
考虑如下所示的两个表:

命令

O_ID ORDER_NO C_ID
1 2253 3
2 3325 3
3 4521 2
4 8532 1

顾客

C_ID NAME ADDRESS
1 RAMESH DELHI
2 SURESH NOIDA
3 DHARMESH GURGAON

我们可以清楚地看到,Orders 表中的字段C_ID 是Customers 表中的主键,即它唯一标识了Customers 表中的每一行。因此,它是 Orders 表中的外键。
句法:

CREATE TABLE Orders
(
O_ID int NOT NULL,
ORDER_NO int NOT NULL,
C_ID int,
PRIMARY KEY (O_ID),
FOREIGN KEY (C_ID) REFERENCES Customers(C_ID)
)

(i) 检查 –
使用 CHECK 约束,我们可以为字段指定条件,在为该字段输入值时应满足该条件。
例如,以下查询创建一个表 Student 并将字段 AGE 的条件指定为 (AGE >= 18 )。即不允许用户在表中输入任何AGE < 18的记录。 详细检查约束

CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
AGE int NOT NULL CHECK (AGE >= 18)
);

(ii) 默认——
此约束用于为字段提供默认值。也就是说,如果在表中输入新记录时,如果用户没有为这些字段指定任何值,则将为它们分配默认值。
例如,以下查询将创建一个名为 Student 的表,并将字段 AGE 的默认值指定为 18。

CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
AGE int DEFAULT 18
);