目录

MySQL概述-数据模型SQL简介DDL数据库操作

MySQL概述 – 数据模型&SQL简介&DDL数据库操作

一. 数据模型

介绍完了Mysql数据库的安装配置之后,接下来我们再来聊一聊Mysql当中的数据模型。学完了这一小节之后,我们就能够知道在Mysql数据库当中到底是如何来存储和管理数据的。

在介绍 Mysql的数据模型之前,需要先了解一个概念:关系型数据库。

SQL语句是操作关系型数据库的统一标准

关系型数据库(RDBMS) :Relational Database Management System

概念:建立在关系模型基础上,由多张相互连接的二维表组成的数据库。

表(Table):是数据库中用来存储数据的对象,是有结构的数据的集合,是整个数据库系统的基础

而所谓 二维表,指的是由行和列组成的表 ,如下图:

https://i-blog.csdnimg.cn/blog_migrate/c692b677a759dec1741b49a7013d63cb.png

二维表的优点:

  • 使用这种表结构存储数据,

    格式统一,便于数据的管理与维护

  • 使用这种表结构来存储数据,我们

    可以使用标准的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是关系型数据库,是基于二维表进行数据存储的 ,具体的结构图下:

https://i-blog.csdnimg.cn/blog_migrate/f30808180da2c6d3d805dca3f1e2e5f9.png

  • 通过MySQL客户端连接数据库管理系统DBMS,然后通过DBMS操作数据库
  • 使用MySQL客户端,向数据库管理系统发送一条SQL语句,由数据库管理系统根据SQL语句指令去操作数据库中的表结构及数据
  • 一个数据库服务器中可以创建多个数据库,一个数据库中也可以包含多张表,而一张表中又可以包含多行记录。

在Mysql数据库服务器当中存储数据,你需要:

  1. 先去创建数据库(可以创建多个数据库,之间是相互独立的)
  2. 在数据库下再去创建数据表(一个数据库下可以创建多张表)
  3. 再将数据存放在数据表中(一张表可以存储多行数据)

二. SQL简介

SQL语句书写的通用语法以及常见的SQL分类

SQL:结构化查询语言。

一门操作关系型数据库的

编程语言 , 定义了一套操作所有关系型数据库

的统一标准。

学习数据库技术,最重要的就是学习SQL语句。

show  databases; — 用来查看数据库服务器当中所有的数据库的。

1.3.1 SQL通用语法

SQL语句可以单行或多行书写,以分号结尾。指令结束需要加上分号或者反斜杠\g

https://i-blog.csdnimg.cn/blog_migrate/7c2cb0a5a1ba8334f8c06d121db6074c.png

SQL语句可以使用空格 / 缩进来增强语句的可读性。

https://i-blog.csdnimg.cn/blog_migrate/be8b8586da0890652138c4188e61ba7c.png

MySQL数据库的SQL语句不区分大小写。

https://i-blog.csdnimg.cn/blog_migrate/dd291a1ee7ca5a5cb066e27623ce0cd1.png

注释:

  • 单行注释:– 注释内容 或 # 注释内容(MySQL特有) 注意:– 后面有个空格
  • 多行注释: / 注释内容 /

1.3.2 SQL语句的分类

SQL语句根据其功能被分为四大类: DDL、DML、DQL、DCL

分类全称说明
DDLD ata D efinition L anguage数据定义语言用来定义数据库对象 ( 包括定义数据库,定义数据库当中的表,定义数据库表中的字段 , 所谓字段指的就是这一列 ), 删除表,更新索引等都是DDL~!
DMLD ata M anipulation L anguage数据操作语言 ,用来对数据库表中的数据进行 增、删、改操作
DQLD ata Q uery L anguage数据查询语言用来查询数据库中表的记录 ,就是 用来查询数据库表结构当中的数据的
DCLD ata C ontrol L anguage数据控制语言用来创建数据库用户、控制数据库的访问权限、删除用户等都是DCL
  • 我们数据库安装好之后,已经有了一个 默认的用户

    root ,也就是 超级管理员用户

  • 那 如果我们在项目当中需要再去创建一个用户,再去给这个用户分配相关权限的话,我们就需要借助于DCL语句,

    DCL语句就可以创建出数据库的用户,并给这个用户分配对应的权限,来指定这个用户你能够操作的数据库是哪些,你能够操作这个数据库下的哪些表,能够对这些表执行什么样的操作,那通过DCL语句就可以控制了。

重点学习 DDL、DML、DQL 这三类SQL语句。

  • 对于

    DCL

    这一类的SQL语句,其实

    主要是用来管理数据库的管理数据库当中的用户,管理数据库的权限 , 那这类的SQL语句在企业当中主要是

    数据库管理员

    也就是

    dba

    经常会用到,我们作为Java开发人员,一般很少会用到。

2. 数据库设计 / 操作

下面我们就正式的进入到SQL语句的学习,在学习之前先给大家介绍一下 我们要开发一个项目,整个开发流程是什么样的,以及在流程当中哪些环节会涉及到数据库。

2.1 项目开发流程

https://i-blog.csdnimg.cn/blog_migrate/1510d99b70841b5cdd55d39e3fd90a97.png

需求文档:

  • 在我们开发一个项目或者项目当中的某个模块之前,会先会拿到产品经理给我们提供的页面原型及需求文档。

https://i-blog.csdnimg.cn/blog_migrate/eca777bb1ff4dc43c26930b1a9c7274d.png

设计:

  • 拿到产品原型和需求文档之后,我们首先要做的不是编码,而是 要先进行

    项目的设计 , 其中就包括

    概要设计、详细设计、接口设计、数据库设计

    等等。

  • 数据库设计根据产品原型以及需求文档,要分析各个模块涉及到的表结构以及表结构之间的关系,以及表结构的详细信息。最终我们需要将数据库以及数据库当中的表结构设计并创建出来。

开发/测试:

  • 参照页面原型和需求进行编码,实现业务功能。在这个过程当中,我们就需要来操作设计出来的数据库表结构,来完成业务的增删改查操作等。

部署上线:

  • 在项目的功能开发测试完成之后,项目就可以上线运行了,后期如果项目遇到性能瓶颈,还需要对项目进行优化。 优化很重要的一个部分就是

    数据库的优化 ,包括 数据库当中索引的建立SQL 的优化分库分表等操作

在上述的流程当中,针对于数据库来说,主要包括三个阶段:

  1. 数据库 设计 阶段

    参照页面原型以及需求文档

    设计数据库表结构

  2. 数据库 操作 阶段

    根据业务功能的实现,

    编写SQL语句对数据表中的数据进行增删改查操作

  3. 数据库 优化 阶段

    通过数据库的优化来提高数据库的访问性能 。 优化手段:索引、SQL优化、分库分表等

接下来我们就先来学习第一部分数据库的设计,而 数据库的设计就是来定义数据库,定义表结构以及表中的字段。

2.2 数据库操作 / 设计-DDL

讲解DDL当中关于数据库操作的SQL语句

我们在进行数据库设计,需要使用到刚才所介绍SQL分类中的DDL语句。

DDL

英文全称是Data Definition Language(

数据定义语言

),

用来定义数据库对象(数据库、表),包括定义数据库,定义表结构。

第一个部分,先来讲解数据库的常见操作

第二个部分,再来讲解表结构的常见操作

DDL中数据库的常见操作: 查询、创建、切换 / 使用、删除。

注意:创建数据库时,在MySQL当中数据库的名字是不允许重复的。

https://i-blog.csdnimg.cn/blog_migrate/f2741a027ca6b0263557f13e8bf275e2.png

2.2.1 查询数据库

**查询所有数据库:

show databases;**

命令行中执行效果如下:

  • 第一个是我们之前创建的数据库,下面的四个是我们安装完MySQL之后自带的数据库,是系统数据库,我们不要去操作它。

https://i-blog.csdnimg.cn/blog_migrate/ec2a1f06cdbd239c6be482a66cf79459.png

假如我们使用了一段时间之后,我这里已经不知道我到底在操作哪个数据库了,那这个时候我们就可以查看一下当前正在操作的数据库。

查询当前数据库:

select database();

https://i-blog.csdnimg.cn/blog_migrate/f1f851768279a18ae296f5e450bd315d.png

  • 我们要操作某一个数据库,必须要切换到对应的数据库中。
  • 通过指令:select  database() ,就可以查询到当前所处的数据库 ,select dababase后面这对小括号这是MySQL当中的函数的调用语法,其实类似于Java当中的方法。

2.2.2 创建数据库

语法:创建数据库:create  database [ if  not  exists ]   数据库名 ; – 不存在我再新建 / 添加

案例: 创建一个db01数据库:create database db01;

https://i-blog.csdnimg.cn/blog_migrate/c7e30ad8994b2b91f102bb58d9335041.png

报错了

,提示:不能创建db01数据库   数据库已存在

注意:在同一个数据库服务器中,不能创建两个名称相同的数据库,否则将会报错。

在MySQL当中数据库的名字是不允许重复的。

  • 可以使用if not exists来避免这个问题
-- 数据库不存在,则创建该数据库;如果存在则不创建
create database if not extists itcast; 

换一个名字,创建db02,创建db02可以复用前面的这一条指令,可以按上下箭头来切换历史指令

,切换出来之后在这条指令的基础上改一下即可。

https://i-blog.csdnimg.cn/blog_migrate/7ebee86bdce5fe506a45b6fc626d8d17.png

  • 出现OK,说明数据库创建成功!!!

此时,再查询一下:

https://i-blog.csdnimg.cn/blog_migrate/800cd5d1f7452bef7e146948c1593aa7.png

注:

在create database后面可以加上一个可选项,这个可选项叫做if not exists,我们加上这么一

个可选项,就代表这个数据库不存在我再创建,如果数据库存在我不创建,我也不会报错,

不会执行任何操作。

语法:创建数据库:create  database [ if  not  exists ]   数据库名 ;

演示:数据库db02已经存在,按照上述语法再次创建数据库db02,回车之后没有报错。

https://i-blog.csdnimg.cn/blog_migrate/b5e827d573f815f97b5c7b21ab262cda.png

2.2.3 切换 / 使用数据库

语法:

use  数据库名 ;

我们要操作某一个数据库下的表时,就需要通过该指令,切换到对应的数据库下,否则不能操作。

比如,我要使用db01这个数据库:

https://i-blog.csdnimg.cn/blog_migrate/e94c63b4bfda3eae01c35e97779f5949.png

指的就是我们切换数据库成功了!!!

假如我们使用了一段时间之后,我这里已经不知道我到底在操作哪个数据库了,那这个时候我们就可以查看一下当前正在操作的数据库。

查询当前数据库:

select database();

  • 我们要操作某一个数据库,必须要切换到对应的数据库中。
  • 通过指令:select  database() ,就可以查询到当前所处的数据库 ,select dababase后面这对小括号这是MySQL当中的函数的调用语法,其实类似于Java当中的方法。

https://i-blog.csdnimg.cn/blog_migrate/5631f266e8980147a4f474ce98caf76a.png

我们可以看到当前正在操作的数据库是db02

2.2.4 删除数据库

**语法:drop  database [ if exists ]   数据库名 ;

– itcast数据库存在时删除

存在我再删除**

  • 如果删除一个不存在的数据库,将会报错。
  • 可以加上参数 if exists ,如果数据库存在,再执行删除,否则不执行删除。
  • 如果不存在,不执行任何操作。

案例:删除db02数据库

https://i-blog.csdnimg.cn/blog_migrate/a66167c9d36622d25432cf9510145f33.png

删除db03数据库,db03数据库不存在,直接删除会报错:

https://i-blog.csdnimg.cn/blog_migrate/47466bc133d3994b0a098d899b4f5f47.png

注意事项:

上述语法中的database,也可以替换成 schema。 如:create schema  db01;

在我们日常开发当中,基本上用的都是database,因为database见名知意,翻译过来就是数据库

  • 如:create schema db01;
  • 如:show schemas;

https://i-blog.csdnimg.cn/blog_migrate/1d5780bc3118215e5f6c1e5e3df61747.png