SQL 约束
约束是我们可以应用于表中数据类型的规则。也就是说,我们可以使用约束来指定存储在表中特定列中的数据类型的限制。
SQL中可用的约束有:
- NOT NULL :这个约束告诉我们不能在列中存储空值。也就是说,如果一个列被指定为NOT NULL,那么我们将不能在这个特定的列中存储NULL。
- UNIQUE :当在列中指定此约束时,表示列中的所有值必须是唯一的。也就是说,列的任何一行中的值都不能重复。
- PRIMARY KEY :主键是一个字段,它可以唯一地标识表中的每一行。这个约束用于指定表中的一个字段为主键。
- FOREIGN KEY :外键是一个字段,它可以唯一地标识另一个表中的每一行。此约束用于将字段指定为外键。
- CHECK :该约束有助于验证列的值以满足特定条件。也就是说,它有助于确保存储在列中的值满足特定条件。
- DEFAULT :当用户没有指定值时,该约束为该列指定一个默认值。
如何指定约束
我们可以使用CREATE表语句在创建表时指定约束。我们还可以在创建表后使用ALTER table语句指定约束。
语法 :
下面是在创建表时使用CREATE表语句创建约束的语法。
CREATE TABLE sample_table
(
column1 data_type(size) constraint_name,
column2 data_type(size) constraint_name,
column3 data_type(size) constraint_name,
....
);
sample_table : 要创建的表的名称.
data_type : 可以存储在字段中的数据类型.
constraint_name : 约束的名称。例如- NOT NULL, UNIQUE,主键等.
让我们详细地看看每个约束。
NOT NULL
如果我们指定表中的一个字段为NOT NULL。那么该字段将永远不会接受空值。也就是说,不允许您在没有向该字段指定任何值的情况下在表中插入新行。
例如,下面的查询创建了一个表Student,其字段ID和NAME为NOT NULL。也就是说,每次希望插入新行时,我们都必须为这两个字段指定值。
CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
ADDRESS varchar(20)
);
UNIQUE
这个约束有助于惟一地标识表中的每一行。例如,对于一个特定的列,所有行的值应该是唯一的。在一个表中可以有多个UNIQUE列。
例如,下面的查询创建了一个表Student,其中字段ID被指定为UNIQUE。也就是说,两个学生不能有相同的ID。详细唯一约束。
CREATE TABLE Student
(
ID int(6) NOT NULL UNIQUE,
NAME varchar(10),
ADDRESS varchar(20)
);
PRIMARY KEY
主键是唯一标识表中每一行的字段。如果表中的一个字段作为主键,那么该字段将不能包含NULL值,并且该字段的所有行都应该有唯一的值。换句话说,我们可以说这是NOT NULL和UNIQUE约束的组合。
一个表只能有一个字段作为主键。下面的查询将创建一个名为Student的表,并指定字段ID作为主键。
CREATE TABLE Student
(
ID int(6) NOT NULL UNIQUE,
NAME varchar(10),
ADDRESS varchar(20),
PRIMARY KEY(ID)
);
FOREIGN KEY
外键是表中的一个字段,它唯一地标识另一个表的每一行。也就是说,该字段指向另一个表的主键。这通常会在表之间创建一种链接。
考虑如下两个表:
Orders
O_ID | ORDER_NO | C_ID |
---|---|---|
1 | 2253 | 3 |
2 | 3325 | 3 |
3 | 4521 | 2 |
4 | 8532 | 1 |
Customers
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 –
使用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) DEFAULT –
此约束用于为字段提供默认值。也就是说,如果在表中输入新记录时,如果用户没有为这些字段指定任何值,那么将为它们分配默认值。
例如,下面的查询将创建一个名为Student的表,并将字段AGE的默认值指定为18。
CREATE TABLE Student
(
ID int(6) NOT NULL,
NAME varchar(10) NOT NULL,
AGE int DEFAULT 18
);