java学习中级阶段-MYSQL数据库安装、使用、操作

数据库MYSQL

1.讲解概述

  • 数据库:是存储数据的仓库

  • 数据:在计算机中的数据有哪些?

    • 图片、文字、音频、视频、文件
  • 数据库的分类:关系型和非关系型数据库

    • 关系型数据库:二维表格

      • 常见的种类

      • 名称隶属公司端口号应用范围
        MySQLOracle免费3306大中小项目
        OracleOracle付费1521大型项目
        SQLServer微软付费1433大中小项目
        postgresql(自学)免费
    • 非关系型数据库:not noly -->nsql,非二维数据库

      • 常见的种类

        MongoDB文档型数据库
        RedisKV(键值对)数据库
        Neo4j(自学)
  • MySQL:是一款关系型数据库,且是Oracle公司的产品,且适用于大中小型项目,且操作比较方便

2.SQLyong基本使用

2.1创建库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PnI2fTOz-1621907612413)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520102002180.png)]

2.2.创建表

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kJCs3pCx-1621907612414)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520101839795.png)]

2.3.用工具对表中的数据实现CRUD
  • 增删改查
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cteXUX5Y-1621907612415)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520102544587.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i0V5mAEt-1621907612416)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520103212927.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ww0FS1Y7-1621907612417)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520103253286.png)]
2.4数据库的备份和还原
  • 备份
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wmjkzy6z-1621907612419)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520104045067.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6KKynHt9-1621907612420)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520104507819.png)]
  • 还原
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hoDOGo1k-1621907612421)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520110305314.png)]
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRQr5pUd-1621907612421)(E:\Typroa笔记\20级启嘉班\JAVA第二阶段\第一周(5.19-5.23)\image-20210520112819263.png)]

3.SQL语句4种的讲解

DDL:数据定义语言 :其主要针对数据库层面和表格和视图等层面的操作(了解即可)

DCL:数据库控制语言 :授权、拒绝授权、撤销授权(了解即可)

DML:数据操作语言:select 、insert、update、delete

TCL:数据控制语言 : 设置保存点,回滚,提交(后续有框架)

DML语句的基本讲解:

  1. 查询语句:select * from user
  2. 添加语句:insert into user (id ,name)values(“004” ,“孙权”)
  3. 修改语句:update user set name=“孙仲谋” where id=“004”
  4. 删除语句:delete from user where id =“004”;
  5. 补充讲解:DBA:数据库管理员:维护数据库和优化数据库
    • SQLyong:是一款收费的能够管理mysql数据库的一个软件,其被称之为查询分析器
3.1.数据库的操作
3.1.1.数据库的创建
create database mydatabase;
create database mydatabase default character utf8;指定字符集创建数据库
3.1.2数据库的删除
drop database mydatabase;
3.2.表的操作
3.2.1创建表
create table student(id int , name varchar(20) ,gender varchar(2)); ##创建学生表(字段名称 字段类型(长度))
3.2.2.删除表
drop table student;##(删除学生表)
3.2.3.重命名表
alter table student rename teacher; ##将学生表重命名为老师表
3.2.4.表中新添加一列
alter table student add column age int; ##在表中添加年龄字段 
3.3.视图的操作
3.3.1.什么是试图:
  • 视图就是一条SELECT语句执行后返回的结果集。所以我们在创建视图的时候,主要的工作就落在创建这条SQL查询语句上
3.3.2.视图的特性:
  • 视图是对若干张基本表的引用,一张虚表,查询语句执行的结果,不存储具体的数据(基本表数据发生了改变,视图也会跟着改变);
  • 可以跟基本表一样,进行增删改查操作(ps:增删改操作有条件限制);
3.3.3.视图的作用:
  • 方便操作,特别是查询操作,减少复杂的SQL语句,增强可读性;
  • 更加安全,数据库授权命令不能限定到特定行和特定列,但是通过合理创建视图,可以把权限限定到行列级别;
3.3.4.使用场合:
  • 权限控制的时候,不希望用户访问表中某些含敏感信息的列,比如salary…
  • 关键信息来源于多个复杂关联表,可以创建视图提取我们需要的信息,简化操作;
3.3.5.视图的创建:
  • 创建三个表:用户(user)、课程(course)、用户课程中间表(user_course)

4.sql语句的进阶操作

select * from student; #查询全部所有的信息
4.1.模糊查询
  • 查询有where条件的信息
select * from student where sname = '张三' ; -- 查询有where条件的信息
  • 右模糊查询
select * from student where sname like '张%'; -- 右模糊查询
  • 左模糊查询
select * from student where sname like '%三'; -- 左模糊查询
  • 左右都模糊查询
select * from student where sname like '%萧%'; -- 左右都模糊查询
4.2.范围查询
4.2.1.关系运算符 : > >= < <= = <>
select * from student where sage > 23;
select * from student where sage <> 23; # 不等于,即要么大于要么小于
select * from student where sage = 23;
4.2.2.逻辑运算符 :and or not (经常与 in 一起使用)
select * from student where ssex = '男' and sage = '22'
select * from student where ssex = '女' or sage > 30
select * from student where sage not in(20,21,23); # not是非运算符,其意思为非
4.2.3. between … and …(两者之间)
select * from student where sage between 20 and 30;
4.2.4.算术运算符: + - * / %
select * from student where sage+10 = 31;# 年龄加10等于31的
4.3.连接(关联)
4.3.1.全连接
select t.tname,c.* from teacher t ,course c where t.tno=c.tno;

select  st.*, t.tname,c.*,s.score from student st,sc s,course c ,teacher t where st.sno=s.sno and c.cno=s.cno and t.tno=c.tno;
4.3.2.左连接:left join 返回包括左表中的所有记录和右表中连接字段相等的记录
select * from course c left join teacher t on c.tno=t.tno; 
4.3.3.右连接:right join 返回包括右表的所有记录和左表中连接字段相等的记录
select * from course c right join teacher t on c.tno=t.tno; 
4.4.临时表
select * from sc ,( select* from student where sage>=23) linShi where sc.sno=linshi.sno
4.5.嵌套+子查询
select  * from sc where sc.sno in (select  sno from student where sage>20)
4.6.分组
select sno 
from sc 
where sc.score>55-- 成绩55小于其最小的成绩59,所以可以
group by sno-- 按照学号将自己的东西归为一组 
having count(sno)>=3-- 对分好组的信息再次做进一步的条件限制
4.7.1.在对结果进行排序的时候要用 order by 列名 DESC(降序)或者ASC ( 升序)
SELECT  * FROM  sc ORDER BY score DESC 

5.内聚函数

5.1.count():是mysql的一个内聚函数,是用来统计表中记录的一个函数,返回匹配条件的行数

包括所有列,返回表中的记录数,相当于统计表的行数,在统计结果的时候,不会忽略列值为NULL的记录

count(*):-

只包括列名指定列,返回指定列的记录数,在统计结果的时候,会忽略列值为NULL的记录(不包括空字符串和0),即列值为NULL的记录不统计在内

count(列名)

忽略所有列,1表示一个固定值,也可以用count(2)、count(3)代替,在统计结果的时候,不会忽略列值为NULL的记录

count(1)
5.2.count(*)&count(1)&count(列名)执行效率比较

1)如果列为主键,count(列名)效率优于count(1)

2)如果列不为主键,count(1)效率优于count(列名)

3)如果表中存在主键,count(主键列名)效率最优

4)如果表中只有一列,则count(*)效率最优

5)如果表有多列,且不存在主键,则count(1)效率优于count(*)

5.3.因为count(*)和count(1)统计过程中不会忽略列值为NULL的记录,所以可以通过以下两种方式来统计列值为NULL的记录数
1)SELECT COUNT(1) FROM student WHERE sname IS null
2)SELECT COUNT(*) FROM student WHERE sname IS null
5.4.特例情况

1)select count(’’) from student;-返回表的记录数
2)select count(0) from student;-返回表的记录数
3)select count(null) from student;-返回0

小结:

1)当列少的时候尽量用count(*)或者count(主键)
2)当为了提升效率的时候尽量用count(主键),因为主键是默认添加主键索引的,索引查询的时候速度快

  • 12
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 13
    评论
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DataPulse-辉常努腻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值