MySQLSQL 的牢笼

讲明:著作有情节全截选自用户“实验楼包工头”发表以实验楼上的科目【MySQL
基础学科】
,想使详细的学SQL,点击教程即可免费学习了;未经允许,禁止转载;

律是如出一辙种植限制,它经过对表的执行仍然列的数目做出限制,来确保表的数目标完整性、唯一性。作品以以实施操作中精晓MySQL 中之几栽约束。

1 封锁分类

任凭名字即理解,约束是平等栽范围,它经过对表的执行或列的数额做出限制,来确保表的多少的完整性、唯一性。

当MySQL中,平日暴发就几乎种约束:

约束类型: 主键 默认值 唯一 外键 非空
关键字: PRIMARY KEY DEFAULT UNIQUE FOREIGN KEY NOT NULL

2 建立涵盖约束的表明

为好介绍就几种植约束,我们先建一个数据库。

当然绝不你同样履一行地输入指令搭建之数据库,实验楼早已也汝准备好了。首先打开
Xfce 终端,输入指令进入 /home/shiyanlou/Desktop 目录:

cd Desktop

使用 git 命令将需之数据文件下载至地面文件夹:

git clone https://github.com/shiyanlou/SQL3

下载就后,输入指令开启 MySQL 服务并应用 root 用户登录:

#打开 MySQL 服务
sudo service mysql start        

#使用 root 用户登录
mysql -u root                   

刚才下载的 SQL3 目录下,有只公文
MySQL-03-01.sql,其中蕴藏的代码可以新建一个数额库
mysql_shiyan,然后在其中创立三布置表
departmentemployeeproject,它们包含了各个束缚。

(SQL3 目录在桌面上,你可用Gedit查看里面的 MySQL-03-01.sql 文件。)

加载文件被的数目,需要以 MySQL 控制马普托输入指令:

source /home/shiyanlou/Desktop/SQL3/MySQL-03-01.sql;

翻看转此数据库,输入命令 show tables;,可见:

MySQL 1

3 主键

主键 (PRIMARY
KEY)是用于约束表中的均等进行,作为立无异进行之绝无仅有标识符,在同一摆设表中通过主键就可以精确定位及一行,由此主键相当至关首要。主键不可知闹更且未能够也空。

MySQL-03-01.sql 中,这里出主键:

MySQL 2

为得以这么定义主键:

MySQL 3

再有雷同种新鲜的主键——复合主键。主键不仅不过表中的均等排列,也可以由表中的蝇头排或多排来一同标识,比如:

MySQL 4

4 默认值约束

默认值约束 (DEFAULT) 规定,当起 DEFAULT
约束之排,插入数据为空时,将运用默认值。

MySQL-03-01.sql 中,这段代码包含了 DEFAULT 约束:

MySQL 5

DEFAULT 约束只会面当使 INSERT
语词(上亦然试介绍了)时显示出,INSERT语句被,如果吃 DEFAULT
约束之地点并未价值,那么这些岗位将会让 DEFAULT 的价填充,如告诉句:

# 正常插入数据
INSERT INTO department(dpt_name,people_num) VALUES('dpt1',11);

#插入新的数据,people_num 为空,使用默认值
INSERT INTO department(dpt_name) VALUES('dpt2');  

输入命令 SELECT * FROM department;,可见表中第二执之people_num 被
DEFAULT 的值 (10) 填充:

MySQL 6

5 唯一约束

唯约束 (UNIQUE)
相比较简单,它规定同一摆表中指定的同排列的价值必须无法生出重复复值,即这同样排每个值都是唯一的。

MySQL-03-01.sql 中,也有 UNIQUE 约束:

MySQL 7

当 INSERT 语句新栽的数额和已经来多少还的时节,尽管出 UNIQUE约束,则
INSERT 战败,比如:

INSERT INTO employee VALUES(01,'Tom',25,3000,110110,'dpt1');
INSERT INTO employee VALUES(02,'Jack',30,3500,110110,'dpt2'); 

结果使图:

MySQL 8

6 外键约束

外键 (FOREIGN KEY) 既能保证数据完整性,也可以显示表内的涉。

一个注解可以暴发多单外键,每个外键必须 REFERENCES (参考)
另一个表达的主键,被外键约束之排,取值必须在它们参考的排列被爆发针对应值。

MySQL 9

每当 INSERT
时,假使叫外键约束的值没有在参考列中有相应,比如以下命令,参考列
(department 表的 dpt_name) 中没有dpt3,则INSERT 失败:

INSERT INTO employee VALUES(02,'Jack',30,3500,114114,'dpt3');

足见之后以 dpt3 改呢 dpt2(department 表中爆发 dpt2),则插入成功:

MySQL 10

7 非空约束

非空约束 (NOT NULL),听名字就会亮,被非空约束之排,在插入值平时须非空。

MySQL 11

MySQL,每当MySQL中负非空约束,不会晤报错,只会时有爆发警示,比如以下语句:

#INSERT 成功 age 为空,因为没有非空约束,表中显示 NULL
INSERT INTO employee(id,name,salary,phone,in_dpt) VALUES(03,'Jim',3400,119119,'dpt2'); 

#警告 salary 被非空约束,值为空,表中显示0
INSERT INTO employee(id,name,age,phone,in_dpt) VALUES(04,'Bob',23,123456,'dpt1'); 

结果要图,出现警示,但仍旧栽数据成功,实验楼的环境是 5.5.505.6
版本以上的 MySQL 会报错,禁止插入不吻合非空约束的数量:

MySQL 12

此刻 employee 表的情呢:

MySQL 13

总结

章通过一个数据库实例精通了主键、默认值、外键、非空、唯一这几乎种植约束之特色,这几乎种约束都是可是广的,需要密切明白每种约束的意思和运用情状。

教程【MySQL
基础学科】
共同17独试验+3个挑衅,课程列表如下:

MySQL 14
MySQL 15
MySQL 16

网站地图xml地图