一步一步学MySQL----6 表的约束

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013003827/article/details/62888263

完整性约束是为了表的数据的正确性!如果数据不正确,那么一开始就不能添加到表中。

数据库中的完整性约束用来防止对数据的意外破坏,来保证数据的安全性和一致性。

完整性约束关键字 作用
NOT NULL(NK) 约束字段的值不能为空
UNIQUE KEY(UK) 约束字段的值是唯一
DEFAULT 设置字段的默认值
PRIMARY KEY(PK) 约束字段为表的主键,可以作为该表记录的唯一标识
AUTO_INCREMENT 设置字段的值自动增加(类型必须是整数)
FOREIGN KEY(FK) 约束字段为表的外键

6.1 设置主键约束(PRIMARY KEY, PK)

主键能够标识表中每条信息的唯一性;

创建主键是为了便于数据库管理系统快速的查找到表中的记录;

设置主键约束时,必须要满足主键字段的值是唯一的、非空的。

说明:主键可以是单一字段,也可以是多个字段,因此,可以分为单字段主键多字段主键

(1)单字段主键

语法:create table table_name(字段名 数据类型 PRIMARY KEY, …….);

例如:

mysql> create table student(
-> id int primary key,
-> name varchar(20),
-> sex varchar(10)
-> );
Query OK, 0 rows affected (0.09 sec)

说明:这里创建了一个学生的表,创建了三个字段(id,name,sex),其中id为主键。

为了验证student表中的字段id是否被设置为PK约束,执行desc查询语句,如下:

这里写图片描述

(2)多字段主键

语法:create table table_name(字段名 数据类型, ……. , constraint 约束名 primary key(字段名, 字段名,… …));

例如:

mysql> create table student1(
-> id int,
-> class_id int,
-> name varchar(20),
-> sex varchar(20),
-> constraint pk_id_classId primary key(id, class_id)
-> );
Query OK, 0 rows affected (0.08 sec)

说明:这里创建了一个学生的表studetn1,创建了四个字段(id,class_id,name,sex),其中id和class_id设为了主键

为了验证student1表中的字段id和class_id是否被设置为PK约束,执行desc查询语句,如下:

这里写图片描述

6.2 设置非空约束(NOT NULL, NK)

非空约束在创建数据库表时为某些字段加上“NOT NULL”约束条件,保证所有记录中该字段都有值。

注意:如果用户插入的记录中,该字段为空值,则数据库管理系统会报错。

语法:create table table_name(字段名 数据类型 NOT NULL, …….);

例如:

mysql> create table student2(
-> id int not null,
-> name varchar(20),
-> sex varchar(20)
-> );
Query OK, 0 rows affected (0.07 sec)

说明:这里创建了一个学生的表studetn2,创建了三个字段(id, name,sex),其中id设为了非空约束

为了验证student2表中的字段id是否被设置为NK约束,执行desc查询语句,如下:

这里写图片描述

6.3 设置字段的默认值(DEFAULT)

当要为数据库表中插入一条新纪录时,如果没有为某个字段赋值,那么数据库系统会自动为这个字段插入默认值。为了达到这种效果,可以通过关键字DEFAULT来设置。

语法:create table table_name(字段名 数据类型 DEFAULT 默认值, … … );

例如:

mysql> create table student3(
-> id int not null,
-> name varchar(20) default ‘pop’,
-> sex varchar(20)
-> );
Query OK, 0 rows affected (0.12 sec)

说明:这里创建了一个学生的表studetn3,创建了三个字段(id, name,sex),其中字段id设为了非空,字段name设有默认值‘pop’。

为了验证student3表中的字段id是否被设置为NK约束,字段name是否设为了默认值‘pop’,执行desc查询语句,如下:

这里写图片描述

6.4 设置唯一约束(UNIQUE, UK)

UK约束在创建数据库表时为某些字段加上“UNIQUE”约束条件,保证所有记录中该字段上的值不重复。

注意:如果用户插入的记录中,该字段上的值与其他记录里该字段上的值重复,则数据库管理系统会报错。

语法:create table table_name(字段名 数据类型 UNIQUE,… … );

例如:

mysql> create table student4(
-> id int unique,
-> name varchar(20),
-> sex varchar(20)
-> );
Query OK, 0 rows affected (0.08 sec)

说明:这里创建了一个学生的表studetn4,创建了三个字段(id, name,sex),其中字段id设为了唯一约束

为了验证student4表中的字段id是否被设置为UK约束,执行desc查询语句,如下:

这里写图片描述

6.5 设置字段值自动增加(AUTO_INCREMENT)

AUTO_INCREMENT是MySQL唯一扩展的完整性约束,当为数据库表中插入新记录时,字段上的值会自动生成唯一的ID。

在具体设置AUTO_INCREMENT约束时,一个数据库表中只能有一个字段使用该约束,该字段的数据类型必须是整型。

注意:由于设置AUTO_INCREMENT约束后的字段会生成唯一的ID,所以该字段也经常会设置成PK主键。

语法:create table table_name(字段名 数据类型 AUTO_INCREMENT,… … );

例如:

mysql> create table student5(
-> id int primary key auto_increment,
-> name varchar(20),
-> address varchar(60)
-> );
Query OK, 0 rows affected (0.13 sec)

说明:这里创建了一个学生的表studetn5,创建了三个字段(id,name,address),其中字段id设为了auto_increment(同时也是PK)约束

为了验证student5表中的字段id是否被设置为auto_increment约束,执行desc查询语句,如下:

这里写图片描述

6.6 设置外键约束(FOREIGN KEY, FK)

外键约束就是把两张表的数据通过某种条件关联起来, 作用是保持数据完整性和一致性。

设置外键约束的两个表之间具有父子关系,即子表中某个字段的取值范围由父表所决定。

在具体设置外键约束时,设置FK约束的字段必须依赖于数据库中已经存在的父表的主键,同时外键可以为NULL。

形象地说:

(1)当两个表建立一对多关系的时候,”一”的那一端是父表,”多”的那一端是子表。

(2)父表设置一个主键

(3)子表设置一个外键

(4)外键与主键相关联

(5)B表引用A表的字段作为外键,那么A表是主表,B表是从表。

语法:create table table_name(字段名 数据类型,… …
constraint 外键约束名 foreign key(字段名) references (父表名((字段名));

例如:

创建一个父表班级classes

mysql> create table classes(
-> id int auto_increment primary key,
-> name varchar(20)
-> );
Query OK, 0 rows affected (0.17 sec)

这里写图片描述

创建子表student

//第一种:添加关键字
mysql> create table student(
-> id int auto_increment,
-> name varchar(20),
-> constraint pk_id primary key(id),
-> class_id int references classes(id)
-> );
Query OK, 0 rows affected (0.08 sec)

这里写图片描述

//第二种:额外声明

mysql> create table student6(
-> id int auto_increment,
-> name varchar(20),
-> constraint pk_id primary key(id),
-> class_id int,
-> constraint fk_classes_id foreign key(class_id) references classes(id)
-> );
Query OK, 0 rows affected (0.14 sec)

这里写图片描述

猜你喜欢

转载自blog.csdn.net/u013003827/article/details/62888263