文章目录
关于数据库的使用:
1. 数据库的背景知识:
(1)数据库是用来存储,管理数据的,数据库的存在建立在硬盘之上,底层用的是硬盘的存储空间,管理数据库需要对数据库进行操作。
(2)对数据库进行操作需要使用数据库语言,SQL是一种标准化定义的关系型数据库语言,用于处理,管理关系型数据库,SQL是一组预定义的指令集,可以通过它来操作,管理关系型数据库。
(3)仅仅有操作数据库的语言是不够的,我们需要有专门的数据库管理系统来根据sql语言来进行接收用户的请求并进行相应地操作执行(管理数据),以及“响应“等等功能,MYSQL即是内在支持sql语言的关系型数据库软件。
2. MYSQL数据库软件的使用(MYSQL安装的问题在另一篇博客中讲解)。
(1)启动MYSQL数据库软件
启动MYSQL数据库软件的方式有几种:
- 可以直接打开提供的数据库程序客户端。
可以在搜索栏中搜索MYSQL
点击即可。 - 通过cmd执行命令打开,需要先配置环境变量:
找到MYSQL的MYSQL Server中的bin目录下:
复制文件路径:
在系统的设置相应的环境变量:
输入安装时设置的密码即可使用。
(2)开始使用数据库程序:
1)相关的知识:
在使用数据库之前,我们先介绍一下整个MYSQL数据库程序的架构:
数据库程序分为客户端与服务器端两部分,客户端用于接收用户的操作信息并向服务端发送“请求”,服务器端接收客户端发来的请求,并执行相应的操作并对其进行“响应”。
在数据库服务器端中可以对多个数据库提供服务。
如图:
数据库中的逻辑结构:
这里的“多个数据库”中的数据库并不是指数据库的统称,也不是指数据库管理系统软件,而是指具体的数据库逻辑结构:
这涉及数据库与数据结构的关系,数据库底层是用数据结构来进行组织数据的,而在关系型数据库中,数据之间的关系抽象是用二维表来表示的。如上图中的学生信息的部分。在一个单个数据库中可能会有多个表,也可能只有一个表,也可能没有表。
关于表的具体描述:
表与表之间的关系:
在单个数据库中表与表之间有可能有联系,有可能没有。
表与表之间的联系是通过具有相同的属性来链接的。
2)具体使用。
注:这里只演示一些常用的,初阶的MYSQL的使用,如果大家需要更深的知识,请去查看文档或者其他博主的博客。
注:MYSQL对字母大小写不敏感,均可以使用
登录:(我是通过命令行客户端的方式登录的,后续会讲到可视化工具)。
如果显示出这个页面说明登录成功。
查看当前数据库服务中存在的数据库:
执行的语句:
show databases;
关于此图的讲解:
图片中显示的即是我的电脑上当前MYSQL服务器上的数据库,(这里有一个问题,我电脑上的数据使用的数据库与MYSQL服务器中的数据库有什么关联?)
新增:
创建数据库,创建表等
创建数据库:
最简单的创建数据库的方式
create database 数据库名;
出现这条语句即说明语句执行成功。
对于要创建的数据库先检验它是否存在:
create database if not exist 数据库名;
指定使用字符集与排序规则的创建数据库的方式:
create database if not exists 数据库名 character set 字符集名 collate 排序规则
我们是用utf8mb4作为字符集名,utf8mb4_0900_ai_ci作为排序规则。
注:在这三种创建数据库的方式中,强烈建议大家使用第三种方式。
使用数据库
use 数据库名 ;
查看当前数据库使用的默认编码集:
show variables like “%character%”;
删除数据库
注: 对于删除的关键字用的是drop。
drop database 数据库名;
注: 删除数据库是一项非常危险的操作,将来如果在工作中要涉及删除的数据库的操作,一定要慎之又慎。
显示指定数据库中现存的表:
show tables;
在进入到指定的库中去后,执行此语句即可。
注: 一般所有的查询显示操作一般均使用show这个关键字。
结果显示,java113库中并没有表。
创建表:
表的格式:
create table if not exists 表名(属性名 数据类型);
其中表的属性部分的设定,至少需要设置一个属性名及其数据类型。
SQL语言也将数据划分成了各种数据类型,用于定义属性。
下面介绍一下常用的数据类型:
数值类型:
字符串类型:
日期类型
删除表:
对于删除的关键字用的是drop。
drop table student;
向表中插入数据
1. 向表中插入一条数据:
语句:
insert into 表名 (属性) values(与属性对应类型的值);
其中在此语句中属性可以是指定表的全部属性,也可以是部分属性。
全部属性:
注:当我们插入字符串属性数据时,可以用英文格式的单引号来引用,也可以用英文格式的双引号来引用。
部分属性:
注: 当对部分属性插入数据时,要注意values中数据与前面属性的适配。
注:当我们要插入全部属性时,可以省略属性列表部分,而直接从values()中放入数据。
insert into 表名 values(全部属性值);
2. 向表中插入多条数据时:
insert into students(属性表) values (属性对应的值),(属性对应的值)...........;
这说明成功插入了两条数据。
注:要一次性插入多条数据时,如果要插入全部属性,也可以省略表名后面的属性列表。
查询:
获取表中的全部记录:
select * from 表名;
* 意为全部的意思。
注:这条语句操作与删除数据操作一样的危险,因为在实际项目开发过程中,一个表中的记录可能极多,如果执行此语句,可能会将服务器直接挤爆,导致无法运行。
获取表中指定属性的记录:
select 属性 from 表名;
查询的字段为表达式时:
select 指定属性的表达式 from student;
注:这个表在数据库中实际上是并不存在的,只是根据我们的操作,然后将从数据库中获取的信息进行处理,形成一个临时的表呈现在我们面前。
查询的字段为表达式且设置别名:
select 属性表达式 as(可有可不有) 别名 from 表名
去重查询操作
获取表中去重操作后的结果:
select distinct 属性名 from 表名
排序查询操作:
按照某一属性进行排序:
select *(属性名) from 表名 order by 属性名 [ASC|DESC] ;
其中ASC是按升序规则进行排序,DESC是按降序规则进行排序。也可以不填写此项,但是不能保证默认的排序规则是什么?不建议。
对NULL数值,系统将其看做是最小的数值,在升序时,放在首位,在降序时,放在末尾。
对表达式及其排名进行排序:
select 属性(可有可无),表达式 (别名【可有可无】) from 表名 order by 表达式(别名)arc/desc;
对每一个属性分别进行排序:
排序规则优先级是按照属性书写顺序优先级
条件查询WHERE:
比较运算符:
逻辑运算符
- 在使用逻辑运算符时,他们之间是有优先级的,不建议被优先级,使用括号即可。
- WHERE条件可以使用表达式,但不能使用别名。
出现这种情况的原因是因为sql的一条语句中,这几个指令的执行是有先后顺序的。
所以,在执行where语句时,并没有num属性,所以报错。
分页查询LIMIT
在之前我们讲过通过select * from 表名获取表中全部数据是一项非常不安全的操作,因此我们可以通过分页查询来将获取的结果
分页查询的语句规则:
select 属性名 from 表名 [where] [order by] limit n ;
limit是记录限制的关键字,n是记录的条数
select 属性名 from 表名 [where] [order by] limit s, n;
s是偏移量,从第几条记录开始来往后获取n条记录。
- select 属性名 from 表名 [where] [order by] limit n offset s;
这条语句比第二条语句更明确规则,offset表示偏移量。
修改
update 表名 set column = 值 [column = 值.....] [where....] [order by......][limit ....];
删除:
delete from 表名 [where...] [order by] [limit] ;
删除指定的几条记录:
删除整个表中全部记录:
我们可以通过delete来删除表中全部的记录,在不加任何限制条件的情况下,
我们只是会删除表中全部的记录,而不是会销毁表,销毁表需要drop关键字。
我们在工作中一般不会使用delete操作,而是设置一个deleteState字段,如果要表示删除这条记录,则通过update语句来将deleteState的值置为1(表示已删除),恢复的话则置为0(表示未删除).
即使在工作中真的不小心删除掉了一个表中全部的记录,我们也可以通过日志(全部sql语句的执行记录)再执行一遍来恢复。