MySQL概述-数据模型SQL简介DDL数据库操作
MySQL概述 – 数据模型&SQL简介&DDL数据库操作
一. 数据模型
介绍完了Mysql数据库的安装配置之后,接下来我们再来聊一聊Mysql当中的数据模型。学完了这一小节之后,我们就能够知道在Mysql数据库当中到底是如何来存储和管理数据的。
在介绍 Mysql的数据模型之前,需要先了解一个概念:关系型数据库。
SQL语句是操作关系型数据库的统一标准
关系型数据库(RDBMS) :Relational Database Management System
概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。
表(Table):是数据库中用来存储数据的对象,是有结构的数据的集合,是整个数据库系统的基础
而所谓 二维表,指的是由行和列组成的表 ,如下图:
二维表的优点:
使用这种表结构存储数据,
格式统一,便于数据的管理与维护
使用这种表结构来存储数据,我们
可以使用标准的SQL语句来操作,标准统一,使用方便
,因为SQL语句可以操作所有的关系型数据库,
而且使用SQL语句还可以很方便的进行一些复杂查询
什么是复杂查询?
比如,我要查询2号员工张无忌他到底归属于哪一个部门的?
此时我们可以看到在员工表当中记录了张无忌,他是归属于2号部门的,2号部门属于哪个部门?此时我们可以去部门表当中查看,部门表当中就记录了2号部门是教研部,这样我就知道了张无忌他是属于教研部的。此时我们就 将这两张表通过部门这一列连接起来查询了,这就是所谓的复杂查询。
当然我们将来除了在多张表之间使用这种复杂查询以外,我们还可以在一张表当中进行一些统计分析,排序分页等这种复杂的查询操作。
我们之前提到的 MySQL、Oracle、DB2、SQLServer 这些 都是属于关系型数据库 ,里面 都是基于二维表存储数据的。
结论:
- 基于二维表存储数据的数据库就成为关系型数据库
- 不是基于二维表存储数据的数据库,就是非关系型数据库(比如大家后面要学习的Redis,就属于非关系型数据库)。
基于这种二维表来存储数据的数据库,我们就称之为关系型数据库。
反之,不是通过表结构来存储数据的,我们就称之非关系型数据库。
2). 数据模型
介绍完了关系型数据库之后,接下来我们再来看一看在Mysql数据库当中到底是如何来存储数据的,也就是Mysql 的数据模型。
刚才我们在本机上已经安装好了MySQL数据库 ,那其实 现在我们的计算机就作为了一台MySQL数据库服务器。
那此时,我们 要想操作这台MySQL数据库,就需要通过MySQL的客户端来连接上这台MySQL数据库服务器,然后才可以操作里面的数据。
在MySQL数据库服务器当中,其实就内置了一个软件,就是这个DBMS — 数据库管理系统
,我们通过数据库管理系统这个软件就可以操作数据库当中的数据了 。比如我们可以通过客户端来发送一条SQL语句给数据库管理系统,告诉它我们要创建一个数据库,那此时,数据库管理系统就会根据我们的指令创建出对应的数据库,而这个 数据库在我们的磁盘文件当中就是以文件夹的形式来体现的。data文件夹下存放的就是MySQL数据库的数据。
在一个数据库服务器当中,我们是可以创建多个数据库的,而且多个数据库之间它们是相互独立,互不影响的。而在这个数据库下面,我们就可以来创建表结构来存放数据,
一个数据库下面我们是可以创建多张表结构的,而表结构当中存储的就是一条一条的数据。
这个表最终体现在磁盘当中就是一个磁盘文件,这个文件当中存放的就是表结构当中的数据。
而我们在查询这张表中数据的时候,它就会把磁盘文件当中的数据加载出来,然后以二维表的形式呈现给我们。
总结:
在MySQL数据库服务器当中存储数据,需要
先去创建数据库 ,然后 在这个数据库下再去创建对应的表结构 , 然后再将数据存放在这个表结构当中 , 而且在一个数据库服务器当中,我们可以创建多个数据库,而且多个数据库之间是相互独立的互不影响的,而一个数据库下面我们又可以创建多张表,一张表当中又可以存储多条数据,这就是MySQL的数据模型。
MySQL是关系型数据库,是基于二维表进行数据存储的 ,具体的结构图下:
- 通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库
- 使用MySQL客户端,向数据库管理系统发送一条SQL语句,由数据库管理系统根据SQL语句指令去操作数据库中的表结构及数据
- 一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包含多行记录。
在Mysql数据库服务器当中存储数据,你需要:
- 先去创建数据库(可以创建多个数据库,之间是相互独立的)
- 在数据库下再去创建数据表(一个数据库下可以创建多张表)
- 再将数据存放在数据表中(一张表可以存储多行数据)
二. SQL简介
SQL语句书写的通用语法以及常见的SQL分类
SQL:结构化查询语言。
一门操作关系型数据库的
编程语言 , 定义了一套操作所有关系型数据库
的统一标准。
学习数据库技术,最重要的就是学习SQL语句。
show databases; — 用来查看数据库服务器当中所有的数据库的。
1.3.1 SQL通用语法
SQL语句可以单行或多行书写,以分号结尾。指令结束需要加上分号或者反斜杠\g
SQL语句可以使用空格 / 缩进来增强语句的可读性。
MySQL数据库的SQL语句不区分大小写。
注释:
- 单行注释:– 注释内容 或 # 注释内容(MySQL特有) 注意:– 后面有个空格
- 多行注释: / 注释内容 /
1.3.2 SQL语句的分类
SQL语句根据其功能被分为四大类: DDL、DML、DQL、DCL
分类 | 全称 | 说明 |
---|---|---|
DDL | D ata D efinition L anguage | 数据定义语言 , 用来定义数据库对象 ( 包括定义数据库,定义数据库当中的表,定义数据库表中的字段 , 所谓字段指的就是这一列 ), 删除表,更新索引等都是DDL~! |
DML | D ata M anipulation L anguage | 数据操作语言 ,用来对数据库表中的数据进行 增、删、改操作 |
DQL | D ata Q uery L anguage | 数据查询语言 , 用来查询数据库中表的记录 ,就是 用来查询数据库表结构当中的数据的 |
DCL | D ata C ontrol L anguage | 数据控制语言 , 用来创建数据库用户、控制数据库的访问权限、删除用户等都是DCL |
我们数据库安装好之后,已经有了一个 默认的用户
root ,也就是 超级管理员用户 。
那 如果我们在项目当中需要再去创建一个用户,再去给这个用户分配相关权限的话,我们就需要借助于DCL语句,
DCL语句就可以创建出数据库的用户,并给这个用户分配对应的权限,来指定这个用户你能够操作的数据库是哪些,你能够操作这个数据库下的哪些表,能够对这些表执行什么样的操作,那通过DCL语句就可以控制了。
重点学习 DDL、DML、DQL 这三类SQL语句。
对于
DCL
这一类的SQL语句,其实
主要是用来管理数据库的 , 管理数据库当中的用户,管理数据库的权限 , 那这类的SQL语句在企业当中主要是
数据库管理员
也就是
dba
经常会用到,我们作为Java开发人员,一般很少会用到。
2. 数据库设计 / 操作
下面我们就正式的进入到SQL语句的学习,在学习之前先给大家介绍一下 我们要开发一个项目,整个开发流程是什么样的,以及在流程当中哪些环节会涉及到数据库。
2.1 项目开发流程
需求文档:
- 在我们开发一个项目或者项目当中的某个模块之前,会先会拿到产品经理给我们提供的页面原型及需求文档。
设计:
拿到产品原型和需求文档之后,我们首先要做的不是编码,而是 要先进行
项目的设计 , 其中就包括
概要设计、详细设计、接口设计、数据库设计
等等。
数据库设计根据产品原型以及需求文档,要分析各个模块涉及到的表结构以及表结构之间的关系,以及表结构的详细信息。最终我们需要将数据库以及数据库当中的表结构设计并创建出来。
开发/测试:
- 参照页面原型和需求进行编码,实现业务功能。在这个过程当中,我们就需要来操作设计出来的数据库表结构,来完成业务的增删改查操作等。
部署上线:
在项目的功能开发测试完成之后,项目就可以上线运行了,后期如果项目遇到性能瓶颈,还需要对项目进行优化。 优化很重要的一个部分就是
数据库的优化 ,包括 数据库当中索引的建立 、 SQL 的优化 、 分库分表等操作 。
在上述的流程当中,针对于数据库来说,主要包括三个阶段:
数据库 设计 阶段
参照页面原型以及需求文档
设计数据库表结构
数据库 操作 阶段
根据业务功能的实现,
编写SQL语句对数据表中的数据进行增删改查操作
数据库 优化 阶段
通过数据库的优化来提高数据库的访问性能 。 优化手段:索引、SQL优化、分库分表等
接下来我们就先来学习第一部分数据库的设计,而 数据库的设计就是来定义数据库,定义表结构以及表中的字段。
2.2 数据库操作 / 设计-DDL
讲解DDL当中关于数据库操作的SQL语句
我们在进行数据库设计,需要使用到刚才所介绍SQL分类中的DDL语句。
DDL
英文全称是Data Definition Language(
数据定义语言
),
用来定义数据库对象(数据库、表),包括定义数据库,定义表结构。
第一个部分,先来讲解数据库的常见操作
第二个部分,再来讲解表结构的常见操作
DDL中数据库的常见操作: 查询、创建、切换 / 使用、删除。
注意:创建数据库时,在MySQL当中数据库的名字是不允许重复的。
2.2.1 查询数据库
**查询所有数据库:
show databases;**
命令行中执行效果如下:
- 第一个是我们之前创建的数据库,下面的四个是我们安装完MySQL之后自带的数据库,是系统数据库,我们不要去操作它。
假如我们使用了一段时间之后,我这里已经不知道我到底在操作哪个数据库了,那这个时候我们就可以查看一下当前正在操作的数据库。
查询当前数据库:
select database();
- 我们要操作某一个数据库,必须要切换到对应的数据库中。
- 通过指令:select database() ,就可以查询到当前所处的数据库 ,select dababase后面这对小括号这是MySQL当中的函数的调用语法,其实类似于Java当中的方法。
2.2.2 创建数据库
语法:创建数据库:create database [ if not exists ] 数据库名 ; – 不存在我再新建 / 添加
案例: 创建一个db01数据库:create database db01;
报错了
,提示:不能创建db01数据库 数据库已存在
注意:在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。
在MySQL当中数据库的名字是不允许重复的。
- 可以使用if not exists来避免这个问题
-- 数据库不存在,则创建该数据库;如果存在则不创建
create database if not extists itcast;
换一个名字,创建db02,创建db02可以复用前面的这一条指令,可以按上下箭头来切换历史指令
,切换出来之后在这条指令的基础上改一下即可。
- 出现OK,说明数据库创建成功!!!
此时,再查询一下:
注:
在create database后面可以加上一个可选项,这个可选项叫做if not exists,我们加上这么一
个可选项,就代表这个数据库不存在我再创建,如果数据库存在我不创建,我也不会报错,
不会执行任何操作。
语法:创建数据库:create database [ if not exists ] 数据库名 ;
演示:数据库db02已经存在,按照上述语法再次创建数据库db02,回车之后没有报错。
2.2.3 切换 / 使用数据库
语法:
use 数据库名 ;
我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则不能操作。
比如,我要使用db01这个数据库:
指的就是我们切换数据库成功了!!!
假如我们使用了一段时间之后,我这里已经不知道我到底在操作哪个数据库了,那这个时候我们就可以查看一下当前正在操作的数据库。
查询当前数据库:
select database();
- 我们要操作某一个数据库,必须要切换到对应的数据库中。
- 通过指令:select database() ,就可以查询到当前所处的数据库 ,select dababase后面这对小括号这是MySQL当中的函数的调用语法,其实类似于Java当中的方法。
我们可以看到当前正在操作的数据库是db02
2.2.4 删除数据库
**语法:drop database [ if exists ] 数据库名 ;
– itcast数据库存在时删除
存在我再删除**
- 如果删除一个不存在的数据库,将会报错。
- 可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
- 如果不存在,不执行任何操作。
案例:删除db02数据库
删除db03数据库,db03数据库不存在,直接删除会报错:
注意事项:
上述语法中的database,也可以替换成 schema。 如:create schema db01;
在我们日常开发当中,基本上用的都是database,因为database见名知意,翻译过来就是数据库
- 如:create schema db01;
- 如:show schemas;