我们通常可以将 SQL
分为四类,分别是
DDL
(数据定义语⾔)、
DML
(数据操作语⾔)、
DQL
(数据查询语⾔)和 DCL
(数据控制语⾔)。
DDL
主要⽤于创建、删除、修改数据库中的对象⽐如创建、删除和修改⼆维表,核⼼的关键字包括 create
、
drop
和
alter
;
DML
主要负责数据的插⼊、删除和更新,关键词包括insert 、
delete
和
update
;
DQL
负责数据查询,最重要的⼀个关键词是
select
;
DCL
通常⽤于授予和召回权限,核⼼关键词是 grant
和
revoke
。
说明 : SQL 是不区分⼤⼩写的语⾔,有⼈会建议将关键字⼤写,其他部分⼩写。为了书写和识别⽅便,下⾯的 SQL 我都是使⽤⼩写字⺟进⾏书写的。 如果公司的 SQL 编程规范有强制规定,那么就按照公司的要求来,个⼈的喜好不应该凌驾于公司的编程规范之上,这⼀点对职业⼈来说应该是常识。
建库建表
下⾯我们来实现⼀个⾮常简单的学校选课系统的数据库。我们将数据库命名为 school
,四个关键的实体分别是学院、⽼师、学⽣和课程,其中,学⽣跟学院是从属关系,这个关系从数量上来讲是多对⼀关系,因为⼀个学院可以有多名学⽣,⽽⼀个学⽣通常只属于⼀个学院;同理,⽼师跟学院的从属关系也是多对⼀关系。⼀名⽼师可以讲授多⻔课程,⼀⻔课程如果只有⼀个授课⽼师的话,那么课程跟⽼师也是多对⼀关系;如果允许多个⽼师合作讲授⼀⻔课程,那么课程和⽼师就多对多关系。简单起⻅,我们将课程和⽼师设计为多对⼀关系。学⽣和课程是典型的多对多关系,为⼀个学⽣可以选择多⻔课程,⼀⻔课程也可以被多个学⽣选择,⽽关系型数据库需要借助中间表才能维持维持两个实体的多对多关系。最终,我们的学校选课系统⼀共有五张表,分别是学院表( tb_college
)、学⽣表(
tb_student
)、教师表(
tb_teacher
)、课程表(
tb_course
)和选课记录表( tb_record
),其中选课记录表就是维持学⽣跟课程多对多关系的中间表。
-- 如果存在名为 school 的数据库就删除它drop database if exists `school` ;-- 创建名为 school 的数据库并设置默认的字符集和排序⽅式create database `school` default character set utf8mb4 collate utf8mb4_general_ci;-- 切换到 school 数据库上下⽂环境use `school` ;-- 创建学院表create table `tb_college`(`col_id` int unsigned auto_increment comment ' 编号 ' ,`col_name` varchar ( 50 ) not null comment ' 名称 ' ,`col_intro` varchar ( 500 ) default '' comment ' 介绍 ' ,primary key ( `col_id` )) engine = innodb auto_increment = 1 comment &#