MySQL01


MySQL课程介绍

  • 上一章的案例是根据xml文件来存储数据的,但是开发中会采用专业的数据库来存储数据
    • img

1. 什么是数据库?

  • 数据库:DataBase(DB),是存储和管理数据的仓库。

    • 例如CRM系统,想要修改数据,不需要动前端和服务端,只需要修改数据库中的数据即可(JavaEE–>JavaEE入门到起飞)

      • 1.改之前+修改操作img

      • 2.改之后img

    • 数据库管理系统:DataBase Management System(DBMS),操纵和管理数据库的大型软件。

    • SQL:Structure Query Language(结构化查询语言),操作关系关系型数据库的编程语言,定义了一套操作关系数据库统一标准。

    • ppt图示

      • img

数据库产品

(不用担心没学其他数据库,因为这些关系型数据都是通过SQL语句操作的)

  • img

  • MySQL数据库课程安排

    • 索引是数据库优化的重要手段,具体的优化需要结合项目实践img

MySQL概述

安装、配置

1.下载

  • 1.安装社区版
    - img

  • 2.访问官网,安装MySQL Community Server的Other Download的第一条(我下的是8.0.34),然后参照课程资料的MySQL安装文档
    - img

2.解压:解压到没有中文和空格的目录

3.配置

  • 1.添加环境变量:

  • 配置环境变量:在系统变量新建MYSQL_HOME,指定解压目录,再在PATH环境变量添加%MYSQL_HOME%\bin

  • 验证配置成功:以管理员身份运行命令行,敲入mysql,回车,提示:Can’t connect to MySQL server on ‘localhost:3306‘的信息则说明配置成功

  • 2.初始化MySQL
    - 在管理员命令行运行指令:mysqld –initialize-insecure,之后会在解压目录生成一个data文件夹用于存放mysql的数据

    • 3.注册MySQL服务

      • 在管理员命令行运行指令:mysqld –install,回车(一定要用管理员身份)

      • 开始菜单,输入“服务”,找到系统服务,看的MySQL一栏,说明MySQL已经注册为了系统服务,并且已经设置为了开机自动启动img

    • 4.启动MySQL服务:

      • 在黑框敲入:net start mysql,回车img

      • 停止MySQL服务:net stop mysql

    • 5.修改默认账户密码

      • 黑框敲入mysqladmin -u root password 1234,这里的1234就是指默认管理员(即root账户)的密码,可以自行修改(提示一条不安全警告则代表修改成功)

四、登录MySQL

  • 黑框输入mysql -uroot -p1234(-u指定用户名username,-p指定密码password),出现下图且左下角为mysql>,则登陆成功

    • 登录成功的警告信息是告诉我们在命令行显示的输出密码不安全,别人一眼就能看到,这样别人就能登陆你的数据库操作数据了,很危险

    • 2.在黑框输入exit退出mysql,输入mysql -uroot -p(不用写密码)img

    • 在下一行的提示输入密码:1234,此时会用星号*隐藏你的密码,保证密码的安全性

五、卸载MySQL:自行参照文档

  • MySQL链接:语法:mysql -u用户名 -p密码 [-h数据库服务器IP地址 -P端口号](后面两个参数不指定默认是本机IP127.0.0.1和mysql默认端口号3306)
    • img

    • 其实以后进入公司,数据库安装在服务器中,而且放在很稳无湿无尘配备完善网络系统、电力系统的机房稳定运行的(以便多人共享访问),这时需要MySQL的客户端远程链接这台MySQL服务器,并且项目组的其他开发人员也在连接这台MySQL服务器img

    • 在学习阶段,我们可以通过虚拟机软件vmware体验这样的企业开发方式,而且服务器其实就是一款虚拟机,我们可以在电脑安装vmware虚拟机,并且用虚拟机虚拟出一台服务器,再在虚拟机安装开发所需的各种软件img

    • 连接远程服务器的MySQL:mysql -h指定我们数据库的IP地址 -P3306(端口号) -uroot(指定连接的用户名是root) -p123(root对应密码)img

    • 为了操作更加方便,我们使用本机的MySQL,企业的开发使用方式先做了解即可

MySQL数据模型

  • 关系型数据库(RDBMS):建立在关系模型基础上,由多张相互链接的二维表组成的数据库。
    • img

    • 特点1:使用表存储数据,格式统一,便于维护

    • 特点2:使用SQL语言操作,标准统一,使用方便,可用于复杂查询

    • 创建数据库语法:create database db01(数据库名字)

      • img
    • 创建数据库,可以在一个数据库创建多张表,一张表又可以创建多条数据,创建表之后会在数据库下产生一个磁盘文件

      • img

SQL简介

  • SQL:一门操作关系数据库的编程语言,定义所有关系型数据库的统一标准。

    • 通用语法:

      • 1.SQL语句可以单行或多行书写,以分号结尾。(show databases;)

      • 2.SQL语句可以使用空格/缩进来增强语句的可读性。(show databases;)

      • 3.MySQL数据库的SQL语句不区分大小写。(SHOW DATABASES;)

      • 4.注释:– 注释内容 (注意:有空格)或 # 注释内容(MySQL特有)(– show database;)

        • 2.多行注释:/注释内容 / (/ show database;/)
    • SQL分类

      • DDL(Data Defination Language):数据定义语言,用来定义数据库对象(数据库,表,字段)

      • DML(Data Manipulation Language):数据操作语言,用来对数据库表中的数据进行增删改查

      • DQL(Data Query Language):数据查询语言,用来查询数据库中表的记录

      • DCL(Data Control Language):数据控制语言,用来控制语言,用来创建数据库用户,控制数据库的访问权限

      • ppt图示

        • img
      • 小结

        • img

MySQL-DDL

1. 开发一个项目的流程:根据开发文档和项目原型设计

  • 1.数据库设计:分析各个模块涉及的表结构以及表结构之间的关系以及表结构的详细信息

    • 2.编码设计一个个功能,并操作第一步设计的数据库表结构完成业务的增删改查

    • 3.项目完成后:优化-数据库优化:索引的建立,SQL的优化,分库分表等操作

    • 图示img

  • DDL:DDL英文全称是Data Defination Language,数据定义语言,用来定义数据库对象(数据库、表)。

  • 数据库

    • 图示

      • img

2. 查询

  • 查询所有数据库:show databases;
    - 上面的第一个是刚刚创建的数据库,下面四个是系统数据库,不要去操作(需要分号结束!)img
    • 查询当前数据库:select database();
      • 忘了当前在操作的数据库,就可以用这个img

使用:使用数据库:use 数据库名

  • 出现数据库切换,则代表使用成功img

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

  • 数据库是不能重名的,创建了同名数据库会报错img

    • 加上可选项if not exists,如果数据库存在就不会执行任何操作,也不会报错,img

    • 如果数据库不存在就创建数据img

删除:删除数据库:drop database [ if exists ] 数据库名

  • 图示img

  • 如果要删除的数据库不存在就会报错,加上可选项if exists就不会报错,也不执行任何操作img

  • 如果要删除的数据库存在就删除它img

  • 注意事项:上述语法中的database,也可以替换成schema。如:create schema dab01;

3. 图形化工具

  • 之前的命令行敲SQL语句,没有提示,错一个字符也不行,不会保存SQL语句历史记录,用户体验差img

    • 我们要使用的DataGrip已经在IDEA中集成了img

    • IDEA右侧有一栏Database就是用来操作数据库的,点击左上角加号连接数据库,选择Data Source以选择操作的数据库->MySQLimg

    • 弹出相关窗口后输入数据库连接的相关信息:Host指定连接的数据库:localhost指定本机端口号,Port端口号3306,User填写用户名,Password填写密码img

    • 填写完毕后,点击Test Connection测试能否连接MySQL,第一次连接需要点击Download按钮下载数据库连接的驱动,测试成功后可以点击OK创建出一个数据库连接

    • 如果database的位置放在右边不太习惯,可以左键拖动放在左边的框img

    • 最初只展示了一个数据库,点击1of5可以选择现实的数据库,All schemas选择所有数据库

    • 连接创建之后会自动打开console控制台,可以执行SQL语句,选择语句点击绿色三角形或按crtl+enter执行选中语句(右击localhost–>new–>console新建控制台)img

    • 但有了图形化软件,之间可以在右侧查看数据,右击localhost–>new–>schema新建数据库(其实还是执行SQL语句),img

    • 右击数据库选择Drop删除数据库(也是执行SQL语句)

    • 切换数据库也不用use语句了,点击右上角的schema,选择要切换的数据库即可img

    • 下方的output栏可以看到已执行的SQL语句记录img

    • 找到之前的查询控制台:右击localhost,选择Navigation,再选择Jump to Query Console,下方的console就是之前的查询控制台,点击即可进入之前的SQL控制台,保留了之前的历史记录,右击控制台可以Rename重命名查询控制台

表结构操作

创建

create table 表名[字段1 字段类型 [ 约束 ] [ comment 字段1注释],….,字段n 字段类型 [ 约束 ] [ comment 字段n注释]](comment 表注释);(方括号是可选的,可以加,也可以不加)

  • varchar(20)是mysql的字符串,括号里指定字符串最地盘存储为多少位,char(1)存储单个字符img

    • 最后一个字段不能加逗号,会报错

    • 选择的是数据库db01,表就会创建在db01数据库下img

    • 双击点开表,点击加号add row添加数据,输入数据后,点击submit,数据就会提交到数据库img

4. 约束

  • 我们想要id为唯一标识,但是它默认是可以重复的,这时候就需要用到约束

    • 概念:约束是作用在表中字段上的规则,用于限制存储在表中的数据。

    • 目的:保证数据库中数据的正确性,有效性和完善性。

    • 非空约束–not null:限制该字段不能为nullimg

    • 唯一约束–unique:保证字段所有的数据都是唯一、不重复的

      • 重复的键提交会报错,duplicate是重复的意思img
    • 主键约束–primary key(auto_increment):主键是一行数据的唯一标识,要求非空且唯一(添加关键字auto_increment主键就会自动增长,按照最大id增长

      • 双击修改单个字段,主键值相同,重复同样会报错img

      • generated即代表自动生成img

      • 根据当前表的最大id自增img

    • 默认约束–default:保存数据时,如果未指定该字段,则采用默认值(设定默认值)

      • 未编辑性别提交img
    • 外键约束–foreign key:让两张表的数据建立连接,保证数据的一致性和完整性(至少需要两张表才能操作)

    • ppt图示

      • img

5. 数据类型

  • MySQL中的数据类型有很多,主要分为三类:数值类型,字符串类型,日期时间类型。

    • 数值类型:
  • age tinyint unsigned;(年龄没有负数,节省内存而选择一字节的tinyint)score double(4,1)(总共4位数字,一位小数位)

    • 尽可能在业务运行的情况下选择占用磁盘小的数据类,只要能满足需求即可,这样就可以节省磁盘空间

      • 用得较多的是tinyint,int,bigint,浮点数用的较多的是double,如果涉及到金额计算,不允许出现精度损失(像是Java的BigDecimal,对精度要求比较高),就用decimal

      • 字符串类型:

  • char(10)最多只能存10个字符,如果不是十个字符,也按照十个字符存储;

  • varchar(10)最多只能存10个字符,如果不是十个字符,按照实际长度(需要时间判断字符个数)(字符个数)存储;

    • blob存储二进制数据,比如说要存储视频,音频就可以用blob后缀的数据类型,但在真实的企业开发中,音视频不会直接存储在数据库中,而会存储在专业的文件服务器,所以比较少用

    • text存储文本字符串,比如说长篇小说,就可以使用带text后缀的类型

    • 示例:phone char(11)(手机号只有11位的),username varchar(20)(用户名长度不确定)

  • 日期时间类型

  • 示例:birthday date(仅仅需要记录时间),update_time(最后一次操作,需要记录详细时间)

    • 案例:根据页面原型/需求创建表(设计合理的数据类型、长度、约束)

      • 需求:资料中的员工管理系统,右边还给出了详细的描述信息img

      • 实际开发中,必须要掌握图形化操作,这里采用图形化操作创建表

      • 我的界面不太一样,但大致相同,选择带有old UI的选项就和老师的一样了(点击汽包设置注释)

        • img
      • tips(归属部门现阶段暂不考虑)

        • 1.创建表基本有一个递增的主键id,创建时间ctreate_time,修改时间update_time

        • 2.性别的男和女一般不写在数据库中,而用1和2表示,因为可能会有男士女士等其他表达,并且使用无符号微小整形以节省内存

        • 3.可选择的下拉列表选项,在数据库的存储也用1234代表

        • 4.图像存储的是图像的url,所有这里用varchar存储

      • 设计表的基本流程img

    • 查询

      • 查询当前数据库所有表:show tables;(在图形化界面用的少了,左边一目了然)img

      • 查询表结构:desc 表名;(图形化界面用的少了,在表的左侧)img

      • 查询建表语句:show create table 表名;(双击展开)

  • 点击表右键选择edit source也能看到这张表的建表语句(我是右击选择Navigation,选择Go to DDL)

    • 修改(Modify table双击字段修改)

      • 添加字段:alter table 表名 add 字段名 类型(长度) [comment 注释] [约束];(加号)

      • 修改字段类型:alter table 表名 modify 字段名 新数据类型(长度);

      • 修改字段名和字段类型:alter table 表名 change 旧字段名 新字段名 类型(长度) [comment 注释] [注释];

      • 删除字段:alter table 表名 drop column 字段名;(减号)

      • 修改表名:rename table 表名 to 表名;(右键表选择Rename)

      • 代码图示

        • img
      • 图形化页面

        • img
    • 删除:drop table [ if exists ] tb_emp;(右击表选择删除)

      • 先复制建表语句,删除该表,再执行复制的建表语句可以保留删除的表

      • 在删除表时,表中的全部数据也会被删除。

  • 小结

    • img

MySQL-DML

  • 第二个部分:根据页面原型以及需求进行相关功能开发进行数据库的操作

  • 需求:(打开资料中的登录.html查看),当添加数据时,前端会提交一个表单,我们就需要把表单中多个数据添加到数据库

  • DML英文全称是Data manipulation Luaguage (数据操作语言),用来对数据库中表的数据进行增、删、改操作。

1. INSERT(添加数据)

  • 1.指定字段添加数据:insert into 表名(字段名1,字段名2) values(值1,值2);
    • 在刚刚的员工管理表中,直接添加username,name,gender的字段会报错,是因为之前的create_time,update_time设置了非空,用MySQL的函数now()为他们赋值即可img

    • 2.全部字段添加数据:insert into 表名 values(值1,值2,…);

      • 在为所有字段添加数据时,可以一一罗列出所有字段(输入第一个字段IDEA会提示),也可以不指定字段img

      • 日期也用引号包裹起来,用字符串进行存储

      • 主键ID可以设置为空,因为它是自增的

    • 3.批量添加数据(指定字段):insert into 表名 (字段名1,字段名2) values (值1,值2),(值1,值2);

      • 就是单个添加数据再加上逗号括号,括号里另一条数据,(…)img
    • 4.批量添加数据(全部字段):insert into 表名 values(值1,值2,…),(值1,值2,…);

    • 注意事项

      • 1.插入数据时,指定的字段顺序需要与值的顺序是一一对应的。

      • 2.字符串和日期类型的数据应该包含在引号中。

      • 3.插入的数据大小,应该在字段规定的范围内。img

    • ppt图示

      • img

2. UPDATE(更新数据)

  • 修改数据:update 表名 set 字段名1 = 值1 , 字段名2 = 值2 , …[ where 条件];

    • 页面原型需求:修改数据时,先根据ID将数据查询出来,再在页面中展示出来,这个操作也叫数据回显,再选择数据进行修改img

    • 需求img

    • tips:1.修改数据的同时还需要修改更新时间update_time为now()2.不加where修改表中全部数据会出现黄色的警告条,点击excute继续执行即可img

    • ppt图示img

  • DELETE(删除数据)

    • 业务场景:页面原型中表格的一项操作就是删除,当点击删除时,就会往服务端发送请求来指定删除哪一条数据,服务端接收到请求后就会操作数据库执行delete语句删除数据

    • delete语法(删除数据):delete from 表名 [ where 条件 ];

    • 需求img

    • 代码img

    • 注意事项

      • 1.DELETE语句的条件可以有,也可以没有,如果没有条件,则会删除整张表的数据。(慎重操作)

      • 2.DELETE语句不能删除某一个字段的一个值(如果要操作,可以使用UPDATE,将该字段的值置为NULL)。

    • ppt图示img

  • 小结

    • img

MySQL-DQL

  • DQL英文全称是Data Query Language(数据查询)语言),用来查询数据库表中的记录。

    • 关键字:SELECT

    • 重要性:查询这个操作是数据库中最常见、重要的操作,一个正常的业务系统中,查询基本可以占据90%以上

      • 1.比如说CRM系统,每次点击左边的菜单栏都会发起一次或多次查询操作,点击课程管理菜单后会显示课程相关数据信息,前端只负责将数据以好看的样式展示出来,最终的数据都是在数据库中存储和管理的(比如课程中的一条数据对应着数据库表结构当中的一条记录,当我们点击课程管理菜单后,就可以将数据库表结构中的数据查询出来)img

      • 2.页面也允许用户在上面根据条件查询(比如在课程名称中输入Java,就可以查询出课程名称中含有Java关键字的课程,添加条件适用人群为小白学员,就可查询到对应数据,也可查询时间范围,对数据排序,分页展示数据加快页面加载速度,同时提高了用户使用体验)img

语法

  • select 字段列表 from 表名列表 where 条件列表 group by 分组字段列表 hanving 分组后条件列表 order by 排序字段列表 limit 分页参数

  • 基本查询:select 字段列表 from 表名列表(字段列表代表我们要查询表中的哪些字段,字段之间用逗号分隔,from后面跟上表名列表,也就是说我们可以从多张表中进行查询)

  • 条件查询(where):在基本查询后面可以加上where,where后面跟上条件列表(可以有多个条件)

  • 分组查询(group by):group by跟上要分组的字段,如果分组之后还要进行条件的筛选,还需要加上关键字having,having之后加的是分组的条件

    • 比如有一张员工表,里面有一个字段是gender性别,要想知道男性员工和女性员工各有多少人,就可以用性别字段进行分组,分完组之后再统计男性女性个多少人
  • 排序查询(order by):order by后跟上排序的字段(支持对多个字段进行排序)

  • 分页查询(limit):在sql语句的后面加上一个关键字limit,limit之后跟上分页参数

  • 准备测试数据:数据库db03下操作,新建控制台mysql_02,资料DQL第一个sql脚本双击打开(其中是上节课的表,插上许多数据),cv到idea,全选执行在db02创建一张表,含29条数据

1. DQL-基本查询

  • 语法

    • 查询多个字段:select 字段1,字段2,字段3 from 表名;

    • 查询所有字段(通配符):select * from 表名;(不推荐:1.不直观,2.性能低)

    • 设置别名:select 字段 [ as 别名1 ], 字段2 [ as 别名2 ] from 表名;(不需要写方括号,只代表可选)

    • 去除重复记录:select distinct 字段列表 from 表名;

    • 需求

      • 题目img

      • 自己写的img

      • 老师的(工作几种?最后的null代表还没有分配职位,职位一共有四种)img

    • tips:

      • 1.写好select 查询的字段之后会报错,不用管,因为没有表名,他不知道指定的字段存不存在,写好from加表名就不会报错了,这些字段已经被识别出来了

      • 2.要写多个或所有字段的话可以先打出selrct from 表名;然后再打字段列表,这样就会有字段和全部字段的提示。

      • 3.以后写项目要查询所有字段推荐写select 字段1,字段2,….. from 表名(先打出后面的),而不推荐select from 表名:1.不直观2.性能低(课上节省时间会使用

      • 4.起别名的as可以省略,但是别名中如果有空格或者特殊符号需要给别名加上引号(单引号/双引号)

    • ppt图示

      • img
  • DQL-条件查询

    • 语法—条件查询:select 字段列表 from 表名 where 条件列表;

    • 条件列表的条件可以有多个,学习条件查询主要就是学会条件的构建方式,并且SQL语句中构建条件的运算符有很多,主要分为比较运算符和逻辑运算符

    • 比较运算符

      • >:大于,>=:大于等于,<:小于,<=:小于等于

      • <> 或 != :不等于,=:等于

      • between … and … :在某个范围之内(含最小、最大值)(between后跟上最小值,and后跟上最大值)

      • in(…):在in之后的列表中的值,多选一

      • like 占位符:模糊匹配(_匹配单个字符,%匹配任意个字符)

      • is null:是null

    • 逻辑运算符:

      • and 或 &&:并且(多个条件同时成立)

      • or 或 || :或者(多个条件任意一个成立)

      • not 或 ! :非,不是

    • 需求

      • 题目imgimg

      • 代码(我的和老师的大差不差)img

    • tips

      • 1.select * from tb_emp where name = ‘杨逍’;因为name是字符串,所以杨逍也要用引号引起来

      • 2.null只能用is判断,而不像其他数据类型用=判断

      • 3.查询结果显示台可以看到查询到数据的条数img

      • 4.并列条件and和&&双与的效果是一样的,只不过sql语句一般写and

      • 5.如果有范围可以用between and 来代替>= <= ,日期也能用于比较运算哦

      • 6.如果查询多个确定的值,就可以in(),里面放上这些值即可(满足其中一个即可)

    • ppt图示img

2. DQL-分组查询

  • 先进行聚合函数的讲解:分组查询操作一般会伴随着聚合统计进行
    • 比如说我们要根据员工的性别来进行分组,分别计算男性员工多少人,女性员工多少人,既要根据gender这个字段进行分组,还要进行分组之后的聚合统计操作,这里就会涉及到数据库中的聚合函数

    • 聚合函数:

      • 介绍:将一列数据作为一个整体,进行纵向计算。

      • 语法:select 聚合函数(字段列表) from 表名;

      • 常见聚合函数:

        • count:统计数量

        • max:最大值

        • min:最小值

        • avg:平均值

        • sum:求和

      • 需求

        • 题目img

        • 我的代码img

      • tips

        • 1.聚合函数不对null值进行运算,所以要统计数据数,要count非空字段,比如说name,username都是非空字段

          • count员工表是id数img

          • count员工表job数(含一个job为null的员工)img

        • 2.count()函数参数里可以放三个类型的东西:1.count(字段)2.count(常量)3.count(*) <–推荐

          • 1.常量可以是数字0,1,2,3…或者是字符串’A’,只要count一个不为null的常量都可以,因为null不参与聚合函数的运算img

          • 2.是通配的意思,通过就可以求这取张表的总数据量,项目开发时推荐使用count(*),因为MySQL数据库底层专门对此做了优化处理


文章作者: Ceasteo
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Ceasteo !
评论
  目录