一。定义、分类

1.定义:建表时,为表中字段加上一些约束,保证表中数据的完整性、有效性。

     ∴约束的作用是:保证表中的数据有效。

2.分类:

    非空约束:not null(列级)

    唯一性约束:unique(列级、表级)

    主键约束:primary key、auto_increment(自动维护主键)

    外键约束:foreign key

    检查约束:check(MySQL不支持,Oracle支持)

二。非空约束

1.定义:not null。约束的字段不能为null。只有列级约束,没有表级约束。

2.举例:

SQL--9--约束  constraint_外键

3.unique和not null联合:

SQL--9--约束  constraint_外键约束_02

三。唯一性约束

1.定义:unique。被约束的字段不能重复,但可以为null。有列级约束、表级约束。

2.举例:

SQL--9--约束  constraint_数据_03

3.列级约束:单字段

SQL--9--约束  constraint_外键_04

4.表级约束:多字段

①举例:

SQL--9--约束  constraint_外键约束_05

②:使用表级约束的条件:

A:为多个字段联合起来添加某一约束时,要用表级约束。此时称为联合唯一性约束

③:联合唯一性约束:

2-多个字段联合在一起,要想具有唯一性,需要使用联合唯一性约束。

举例:

SQL--9--约束  constraint_数据_06

四。主键约束

1.主键的分类:

①单一主键、复合主键;             ②自然主键、业务主键。

2.主键的作用:

主键值:每一行记录的唯一标识。

使用注意:主键不重复。表没有主键,则表无效。

3.主键的特征:

not null + unique(主键值不能是NULL,同时也不能重复!)

4.添加单一主键:

SQL--9--约束  constraint_字段_07

5.使用表级约束添加主键

SQL--9--约束  constraint_主键_08

6.使用表级约束添加复合主键:

SQL--9--约束  constraint_字段_09

7.一个表中只能有 1 个主键约束。

SQL--9--约束  constraint_数据_10

8.主键值建议使用:int、bigint、char等类型。不建议使用:varchar类型。主键值一般都是数字、定长的。

五。外键约束

1.业务背景:

设计数据库表,来描述“班级和学生”的信息。

为保证学生表内的【no】数据,在填写时,符合班级表内的【classno】数据,避免出现填写为“102”的现象。需要给cno字段添加外键约束。

此时:

cno字段就是外键字段。

cno字段中的每一个值都是外键值。

SQL--9--约束  constraint_外键约束_11

SQL--9--约束  constraint_字段_12

创建表的顺序:父→子

删除表的顺序:子→父

插入数据的顺序:父→子

删除数据的顺序:子→父

Q1:子表中外键引用父表中的某个字段,被引用的这个字段必须是主键吗?

A1:不一定是主键,但是至少有unique约束。

Q2:外键可以为null吗?

A2:可以

六。自动维护主键    auto_increment

1.auto_increment:自增,从1开始,以1自增。不写主键,系统会自动填充主键。

SQL--9--约束  constraint_外键约束_13SQL--9--约束  constraint_数据_14

七。自然主键、业务主键

1.自然主键:主键值是一个自然数,和业务没关系。

2.业务主键:主键值和业务紧密关联,例如拿银行卡账号做主键值。这就是业务主键。

3.实际开发中,使用自然主键较多:

   ∵主键只要做到不重复就行,不需要有意义。并且主键一旦和业务挂钩,当业务发生变动时,可能会影响到主键值,所以业务主键不建议使用。