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

一. 数据模型

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

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

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

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

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

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

二维表的优点:

  • 使用这种表结构存储数据,格式统一,便于数据的管理与维护

  • 使用这种表结构来存储数据,我们可以使用标准的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数据库服务器当中存储数据,你需要:

  1. 先去创建数据库(可以创建多个数据库,之间是相互独立的)

  2. 在数据库下再去创建数据表(一个数据库下可以创建多张表)

  3. 再将数据存放在数据表中(一张表可以存储多行数据)

二. SQL简介 

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

SQL:结构化查询语言。一门操作关系型数据库的编程语言定义了一套操作所有关系型数据库               的统一标准。

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

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

1.3.1 SQL通用语法

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

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

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

4. 注释:

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

1.3.2 SQL语句的分类

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

分类全称说明
DDLData Definition Language数据定义语言,用来定义数据库对象(包括定义数据库,定义数据库当中的表,定义数据库表中的字段,所谓字段指的就是这一列)
DMLData Manipulation Language数据操作语言,用来对数据库表中的数据进行增删改
DQLData Query Language数据查询语言,用来查询数据库中表的记录,就是用来查询数据库表结构当中的数据的
DCLData Control Language数据控制语言,用来创建数据库用户、控制数据库的访问权限

我们数据库安装好之后,已经有了一个默认的用户 --- root,也就是超级管理员用户。

如果我们在项目当中需要再去创建一个用户,再去给这个用户分配相关权限的话,我们就需要借助于DCL语句,DCL语句就可以创建出数据库的用户,并给这个用户分配对应的权限,来指定这个用户你能够操作的数据库是哪些,你能够操作这个数据库下的哪些表,能够对这些表执行什么样的操作,那通过DCL语句就可以控制了。

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

对于DCL这一类的SQL语句,其实主要是用来管理数据库的,管理数据库当中的用户,管理数据库的权限,那这类的SQL语句在企业当中主要是数据库管理员也就是dba经常会用到,我们作为Java开发人员,一般很少会用到。

2. 数据库设计 / 操作

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

2.1 项目开发流程

需求文档:

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

 设计:

  • 拿到产品原型和需求文档之后,我们首先要做的不是编码,而是要先进行项目的设计,其中就包括概要设计、详细设计、接口设计、数据库设计等等。

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

开发/测试:

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

部署上线:

  • 在项目的功能开发测试完成之后,项目就可以上线运行了,后期如果项目遇到性能瓶颈,还需要对项目进行优化。优化很重要的一个部分就是数据库的优化,包括数据库当中索引的建立、SQL 的优化、分库分表等操作。

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

  1. 数据库设计阶段

            参照页面原型以及需求文档设计数据库表结构
  2. 数据库操作阶段

            根据业务功能的实现,编写SQL语句对数据表中的数据进行增删改查操作
  3. 数据库优化阶段

            通过数据库的优化来提高数据库的访问性能。优化手段:索引、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;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/17962.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】进程地址空间

目录 引入 进程地址空间 虚拟地址与物理地址 如何理解虚拟地址的不同区域 写时拷贝 动态开辟的细节 为什么存在进程地址空间 避免地址被随意访问 进程管理和内存管理解耦合 使进程用统一的视角看待代码和数据 引入 🎃我们写一个这样的程序,运…

算法记录 | Day50 动态规划

123.买卖股票的最佳时机III 思路: 1.确定dp数组以及下标的含义 最多可完成两笔交易意味着总共有三种情况:买卖一次,买卖两次,不买卖。 具体到每一天结束总共有 5 种状态: 未进行买卖状态;第一次买入状…

springboot - spring.factories

spring.factories 是什么? spring.factories 是 Spring Boot 自动配置的核心机制之一,它用于自动注册 Spring Boot 中的各种自动配置类,从而实现自动化配置的目的。在 Spring Boot 应用程序启动时,Spring Boot 会自动扫描 classp…

深度解读:《数字孪生世界白皮书(2023)》全方位剖析

2023年初,中国信息通信研究院发布了《数字孪生城市产业图谱研究报告(2022)》,报告中提出我国数字孪生产业四阶段体系,2020年到2030年是我国数字孪生产业增长期,当前数字孪生市场需求和技术均处于高速发展阶…

5月跳槽有风险,不跳也有?

今天讲讲跳槽。 说实话跳槽是为了寻求更好的发展,但在跳槽前我们也不能确定下家就是更好的归宿,这就更加需要我们审慎地去对待,不能盲目跳槽。 其次,我们离职和跳槽,其中的原因很大一部分是目前薪资不符合预期。 那…

C. Permutation Game(博弈 + 拓扑的思想)

Problem - C - Codeforces 经过漫长的一天, Aice和Bob决定玩一个小游戏。游戏棋盘由n个格子组成,在一条直线上,编号从1到n,每个格子包含一个数字4;,qy在1到n.之间,而且没有两个格子包含相同的数字。 一个棋子被放在其中一个格子里…

什么牌子蓝牙耳机好用不贵?国产性价比高的蓝牙耳机推荐

相较于有线耳机,无线蓝牙耳机更便携、功能更丰富,不用受到耳机孔与线的限制。那么,什么牌子的蓝牙耳机好用不贵?针对这个问题,我给大家推荐几款国产性价比高的蓝牙耳机,可以当个参考。 一、南卡小音舱Lite…

Spring使用注解存储和读取对象

文章目录 一、存储Bean对象配置扫描添加注解存储Bean对象注解使用范围Bean的命名五大类注解的关系为什么需要五大类注解? 二、方法注解BeanBean重命名 三、对象注入属性注入Setter注入构造方法注入Autowired 和 Resource 的区别 一、存储Bean对象 之前我们存储Bean时&#xff…

5 Redis缓存穿透、击穿、雪崩、分布式锁、布隆过滤器

1 Redis 应用问题解决 1.1 缓存穿透 1.1.1 问题描述 key 对应的数据在数据源并不存在,每次针对此 key 的请求从缓存获取不到,请求都会压到数据源(数据库),从而可能压垮数据源。比如 用一个不存在的用户 id 获取用户…

一份标准的软件测试方案模板

第一章 概述 ​ 软件的错误是不可避免的,所以必须经过严格的测试。通过对本软件的测试,尽可能的发现软件中的错误,借以减少系统内部各模块的逻辑,功能上的缺陷和错误,保证每个单元能正确地实现其预期的功能。检测和排…

亚马逊云科技开启您的云财务管理之旅:云财务运营

亚马逊云科技“开启您的云财务管理之旅”系列内容提出了关于如何启动和实施一个成功的云财务管理CFM战略的建议。云财务管理CFM的三个原则:SEE-查看、SAVE-节省和PLAN-计划。接下来介绍的是第四个阶段:RUN-运营。 在这一阶段,可以了解云财务管…

vue 做一个文本展示 点击文本弹出element ui的时间选择器 但不会出现element ui时间组件的那个输入框

我们先来创建一个vue2项目 引入element ui 然后 找到一个组件 这样写 <template><div><el-date-pickerv-model"value"type"datetimerange"align"right"unlink-panelsrange-separator"至"start-placeholder"开始日…

C/C++的命名空间和调用函数的详细讲解

目录 空函数 调用函数 调用 执行流程 命名空间 在创建函数时&#xff0c;必须编写其定义。所有函数定义包括以下组成部分&#xff1a; 名称&#xff1a;每个函数都必须有一个名称。通常&#xff0c;适用于变量名称的规则同样也适用于函数名称。形参列表&#xff1a;调用函…

手机摄影笔记(二)

第5章 镜头语言 镜头语言分类&#xff08;8个&#xff09;&#xff1a; 推&#xff1a;从远到近 拉&#xff1a;从近到远 摇&#xff1a;机位固定&#xff0c;旋转手机拍全景或者跟着拍摄对象进行摇摄&#xff08;跟摇&#xff09;.通常用此方式来介绍环境时&#xff0c;表现的…

开放原子训练营(第三季)inBuilder低代码开发实验室---报销单录入系统

作为一名低代码初学者&#xff0c;我使用inBuilder系统设计了一款报销单录入系统&#xff0c;实现了报销单录入与显示报销单列表的功能&#xff08;如图1与图2所示&#xff09;&#xff0c;并获得了很多开发心得。从inBuilder系统的优点、缺点以及开发过程三方面出发&#xff0…

基于SpringBoot,vue的家政服务平台的设计与实现

背景 以往的家政服务管理平台的管理&#xff0c;一般都是纸质文件来管理家政服务信息&#xff0c;传统的管理方式已经无法满足现代人们的需求&#xff1b;使用家政服务管理平台, 首先可以大幅提高家政服务信息检索&#xff0c;只需输入家政服务相关信息就能在数秒内反馈想要的…

JavaScript学习(一)

一、JavaScript的背景及知识结构 1、三个问题 什么是JavaScript&#xff1f;JavaScript能干什么&#xff1f;JavaScript是由什么构成的&#xff1f;怎样学习JavaScript&#xff1f; 2、什么是JavaScript&#xff1f; ①JavaScript是一种轻量级的编程语言&#xff1b;借鉴了J…

【SSA-LSTM】基于麻雀算法优化LSTM 模型预测研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

C#_Struct与Class的差异

简述 struct属于值类型&#xff0c;class属于引用类型 存储地址 struct储存于栈&#xff0c;class储存于堆&#xff08;class于栈中储存引用&#xff09; 传参性质 struct属于值传递&#xff0c;在函数内对参数进行修改&#xff0c;不会修改struct class处于引用传递&…

行为型模式-状态模式

状态模式 概述 【例】通过按钮来控制一个电梯的状态&#xff0c;一个电梯有开门状态&#xff0c;关门状态&#xff0c;停止状态&#xff0c;运行状态。每一种状态改变&#xff0c;都有可能要根据其他状态来更新处理。例如&#xff0c;如果电梯门现在处于运行时状态&#xff0…