MySQL数据库--增删改查
这一部分主要是针对于基础的操作,也是对学习知识的一个熟练应用。
一丶数据库的概念
首先,什么是一个数据库呢?数据库有什么作用呢?如果单单就是为了存储数据,那么我们用文件存储就可以了。为什么还要弄一个数据库出来呢?为了回答这个问题,首先我们要知道用文件存储数据的不安全性。
1.文件的不安全性
2.文件不利于数据存储和管理
3.文件不太能存储海量数据。
4.文件才程序控制中不方便。
所以为了解决以上问题,我们开发了数据库并引出了相关概念。那么数据库存储文件在哪里存储的呢?数据库存储介质有两种:
1.
磁
盘
2.
内
存
\color{red}{1.磁盘 2.内存}
1.磁盘2.内存
数据库大致可以分为两种,关系型数据库和非关系型数据库。
关系型数据库
所谓关系型数据库,指的是:
是指采用了关系模型来组织数据的数据库。 简单来说,关系模型指的就是二维表格模型,而一个关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:
- Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系统收费。
- MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
- SQL Server:微软的产品,安装部署在windows server上,适用于中大型项目。收费。
非关系型数据库
所谓非关系型数据库指的是:
不规定基于SQL实现。现在更多是指NoSQL数据库,如:
- 基于键值对(Key-Value):如 memcached、redis
- 基于文档型:如 mongodb
- 基于列族:如 hbase
- 基于图型:如 neo4j
二丶数据库相关操作
进入数据库
首先我们进入数据库的方式有两种,第一种就是直接通过开始菜单栏进入:
但是如果你配置了相关路径,你就可以直接通过DOS窗口来打开。输入命令:mysql -u root -p
,输入完成后再输入密码也可以进入你的数据库
增
新增数据库
这里的增不仅仅是增加数据库,还有增加对应的表等等,一步步来。
首先进入数据库之后输入命令:show databases;
然后我们通过命令create database test;
,新建一个名为test的数据库。
这里注意了,我们尽量给后面加一个character set utf8mb4
,这样的话数据库里面就可以接收中文了。完整命令:
create database test character set utf8mb4;
建立完成之后我们再次输入命令show databases
来查看数据库
可以发现,已经建好了。
新增表
然后我们输入命令use test
,进入当前数据库。
然后我们就要准备创建一个表了,但是我们在创建表之前,我们要想一想表当中有那些属性是我们需要的。
比如这里:
我们创建一个学生表,首先学生需要一个id,来对学生进行排序,再接着学生有姓名,有学号,还有自己的qq邮箱
关于数据类型
java当中有着数据类型,mysql当中肯定也有,毕竟保存的数据类型多种多样。其中,大致类型有:
数
值
类
型
\color{red}{数值类型}
数值类型
日 期 和 时 间 类 型 \color{red}{日期和时间类型} 日期和时间类型
字
符
串
类
型
\color{red}{字符串类型}
字符串类型
增加新表
了解了大致的数据类型之后,我们就可以开始创建一张表了,创建表的大致格式如下:
CREATE TABLE table_name (
field1 datatype,
field2 datatype,
field3 datatype
);
但是在这之前我们可以新增加一条语句,就是防止以后我们在真正使用数据库的时候没有更新对应的数据。
drop table if exists student
具体实践如下:
加入数据
那么在这里我们可以使用指令:
insert into student(id,sn,name,qq_mail) values(插入数据);
这里的id,sn,name,qq_mail指的是当前表中的成员属性,然后通过上述语句我们可以直接插入数据,展示如下:
也可以使用简略版本,因为这个是指定属性进行插入,我们也可以不指定属性,然后默认属性插入,也就是:
插入之后是这个样子:
查
对于查询,我们还是一个一个操作来往下走。
在这里,我们为了方便接下来内容的讲解,新建一张表。
全列查询
全列查询就是查询整个表:
SELECT * FROM exam_result;
表现如下:
指定列查询
指定列查询就是把上面的查询语句稍微改一下:
select id,name from exam_result;
数据库里表现如下:
查询字段为关键字
具体可以分为以下几种:
表 达 式 不 包 含 字 段 \color{red}{表达式不包含字段} 表达式不包含字段
SELECT id, name, 10 FROM exam_result;
表 达 式 包 含 一 个 字 段 \color{red}{表达式包含一个字段} 表达式包含一个字段
SELECT id, name, english + 10 FROM exam_result;
表现在数据库如下:
表 达 式 包 含 多 个 字 段 \color{red}{表达式包含多个字段} 表达式包含多个字段
SELECT id, name, chinese + math + english FROM exam_result;
表现在数据库如下:
取别名
这一操作是为查询当中的列指定别名,表示返回的结果集中,以别名作为改列的名称,语法:
SELECT column [AS] alias_name [...] FROM table_name;
具体表现在数据库当中如下:
当熟练以后,这个as是可以去掉的,但是目前笔者新手上路,还是稳一点。
去重:DISTINCT
这里使用distinct关键字对某列数据进行去重。
SELECT DISTINCT math FROM exam_result;
排序
-- ASC 为升序(从小到大)
-- DESC 为降序(从大到小)
-- 默认为 ASC
SELECT ... FROM table_name [WHERE ...]
ORDER BY column [ASC|DESC], [...];
使用要点如下:
1.首先 order by是一定要写的
2.记住Null数据比如任何数据都要小。
3.可以使用表达式和别名排序
4.可以对多个字段进行排序,具体排序顺序由关键字顺序决定
那么我们在数据库当中演示一下:
首先是升序排序
再来个降序排序:
条件查询:Where
关于条件查询,主要是运算符的作用:
首
先
是
比
较
运
算
符
\color{red}{首先是比较运算符}
首先是比较运算符
接
着
是
逻
辑
运
算
符
\color{red}{接着是逻辑运算符}
接着是逻辑运算符
那么接下里通过这些运算符来对我们的表来进行查询操作。
首 先 是 关 于 基 本 查 询 \color{red}{首先是关于基本查询} 首先是关于基本查询
基本查询就按照最基本的大于小于来进行查询。
select id,name,math from exam_result where math > 90;
a n d 与 o r \color{red}{and 与 or} and与or
其实也就是对where语句进行一些修改
select id,name,math,english from exam_result where math > 90 and english >= 90;
具体如下:
范围查询
范围查询其实就是上面条件查询的拓展,具体使用如下语句。
b e t w e e n . . . a n d . . . . \color{red}{between...and....} between...and....
SELECT name, chinese FROM exam_result WHERE chinese BETWEEN 80 AND 90;
记住这里的范围是:
[80,90],80和90都是可以取到的
但是上面的语句我们用and也是可以实现的。
SELECT name, chinese FROM exam_result WHERE chinese >= 80 AND chinese
<= 90;
i
n
\color{red}{in}
in
关于in查询就是指定了一个集合,然后查询在这个集合里面的元素。比如:
-- 查询数学成绩是 58 或者 59 或者 98 或者 99 分的同学及数学成绩
SELECT name, math FROM exam_result WHERE math IN (58, 59, 98, 99);
实现如下:
这个语句我们可以用or来实现:
SELECT name, math FROM exam_result WHERE math = 58 OR math = 59 OR math
= 98 OR math = 99;
模糊查询:LIKE
模糊查询主要就是关于两个字符 % 和 _ 的使用。
1.%表示可以是0 ~ 任意个字符
2._只能是一个字符
它的具体含义是这个样子的:
-- % 匹配任意多个(包括 0 个)字符
SELECT name FROM exam_result WHERE name LIKE '孙%';-- 匹配到孙悟空、孙权
但是如果说你用_的话,那就只有一个结果:
-- _ 匹配严格的一个任意字符
SELECT name FROM exam_result WHERE name LIKE '孙_';-- 匹配到孙权
null查询
这里的话没有什么特别需要说的,就是看数据为不为Null。
-- 查询 qq_mail 已知的同学姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NOT NULL;
-- 查询 qq_mail 未知的同学姓名
SELECT name, qq_mail FROM student WHERE qq_mail IS NULL;
分页查询
-- 起始下标为 0
-- 从 0 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n;
-- 从 s 开始,筛选 n 条结果
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT s, n;
-- 从 s 开始,筛选 n 条结果,比第二种用法更明确,建议使用
SELECT ... FROM table_name [WHERE ...] [ORDER BY ...] LIMIT n OFFSET s;
这里的话,我们用一个例子来演示,比如说,我们要取英语第二到第三名。
那么是不是要先降序排序?降序排序之后用limit来进行数据的取值。
降序完成之后,接着取2~3名数据,以下是两种写法,都尝试一下:
改
对于改变的话,一般我们都是更改表中的数值。这里使用update关键字进行修改。
语法如下:
UPDATE table_name SET column = expr [, column = expr ...]
[WHERE ...] [ORDER BY ...] [LIMIT ...]
比如说,我们把孙权同学的英语成绩改为90,在改之前:
使用修改语句进行修改:
update exam_result set english = 90 where name = '孙权';
删除
删除操作整体语句如下:
DELETE FROM table_name [WHERE ...] [ORDER BY ...] [LIMIT ...]
删除单行数据
然后根据上面的语句,我们删除一行数据,比如:我们删除孙权同学的成绩。
delete from exam_result where name = '孙权';
可以看到,孙权同学的成绩已经消失了。
清空整个表
如果说我们不加where,那么就是清空表的数据。
delete from exam_result;
删除表 + 删除数据库
这里的删除操作我们统一用drop关键字。
drop table exam_result;
删除之后可以看到,当前表已经消失。
然后继续删除数据库:
drop datebase test;
最后也可以看到,test这个数据库也消失了。