mysql
mysql macos: https://pan.baidu.com/s/1ejSUByvvi94e0jb5b4zPrw 密码: 4rl8
navicat 11.1.13(简体中文): https://pan.baidu.com/s/1DrQ0v0GKeLddKL_yegRn5w 密码: r8pw
navicat 15.0.26(英文): https://pan.baidu.com/s/1rBpB-EL-0mIS6nrMrEXfLQ 密码: glu8
你了解数据库吗
- 数据库的好处
1、可以持久化数据到本地
2、结构化查询 - 数据库常见概念
1、DB: 数据库, 存储数据的容器
2、DBMS: 数据库管理系统,又称为数据库软件或数据库产品, 用于创建或管理 DB
3、SQL: 结构化查询语言, 用于和数据库通信的语言, 不是某个数据库软件特有的, 而是几乎所有的主流数据库软件通用的语言 - 数据库存储数据的特点
1、数据库存放到表中, 然后表再存放到库中
2、一个库可以有多张表, 每张表具有唯一的表名用来标识自己
3、表中有一个或多个列, 列又称为“字段”, 相当于 java 中的“”属性
4、表中的每一行数据, 相当于 java 中的“对象” - 常见的数据库管理系统
mysql、oracle、db2、sqlserver mysql 背景
前身属于瑞典的一家公司, MYSQL AB
08 年被 sun 公司收购
09 年 sun 被 oracle 收购mysql 优点
1、开源、免费、成本低
2、性能高、移植性好
3、体积小、便于安装
属于 c/s 架构的软件, 一般安装服务端
什么是 SQL?
Structured Query Language(结构化查询语言), 为了定义操作所有关系型数据库的规则.每一种数据库操作的方式存在不一样的地方, 称为“方言”;
SQL 分类
DDL (Data Definition Language) 数据定义语言
用来定义数据库对象: 数据库, 表,列等. 关键字:create、drop、alter 等
DML (Data Manipulation Language) 数据操作语言
用来对数据库中的表的数据进行增删改, 关键字:insert、delete、update 等
DQL (Data Query Language) 数据查询语言
用来查询数据库中表的记录. 关键字: select、where 等
DCL (Data Control Language) 数据控制语言
用来定义数据库的访问权限和安全级别, 以及创建用户. 关键字: grant、revoke 等
超基础 mysql 操作
连接
配置好 mysql 环境变量之后直接 sql, 如果没配置好就要进入安装 mysql 的目录下去敲
1 | mysql [-h主机名 -p端口] -u用户名 -p密码 |
常见简单 curd
连接 sql 数据库之后, 命令行会变成 mysql> 这样的形式, 然后就可以直接敲 sql 了,注意命令的最后要加上; 或者/g
查看当前连接下的所有数据库
1 | show databases; |
选择指定的库
1 | use 库名 |
查看当前库的所有表
1 | show tables; |
查看其他库的所有表
1 | show tables from 库名; |
创建表
1 | create table 表名 ( |
插入数据
1 | insert into `tb_user` (name, age) values ('hardy', 19); |
查看表结构
1 | desc 表名 |
查看服务器的版本
- 登陆到 mysql 服务端
1 | select version(); |
- 没登陆到 mysql 服务端
1 | mysql --version || mysql -V |
起别名
1 | select 100%98 as 结果 |
有点 js 里面 import xxx as ooo from ‘xxoo’的那种味道了, 目的其实就是为了重名的情况可以使用别名.
去重
假如要查询表里面都有哪些年龄段的小方块
可以看到查出来两个三岁的, 但是实际上 3 岁的只需要看到一个就好了, 所以就可以这么去重
1 | select DISTINCT age from tb_user |
+ 号的作用
java 中的+号:
1、运算符: 两个操作数都是数值型
2、连接符: 只要有一个操作数为字符串
mysql 中的+号:
仅仅只有一个功能: 运算符
demo: select 100 + 90;则是查询 190, 然后别名是 100+90
⚠️ 注意: 如果其中一方为字符型(如: select ‘100’ + 90), 则会试图将字符型转换成数值型, 如果转换成功, 则继续做加法运算, 也就是(select 100 + 90); 如果转换失败(如: select ‘hardy’ + 90), 则字符数值转换成 0, 也就是(select 0 + 90);
连接查询
1 | select concat(name, age) as result // 别名: result 结果: 小方块3 |
筛选条件 select * from 表 where 筛选条件
按条件表达式筛选
>、 <、 =、 !=、 <>、 >=、 <=
1 | select * from tb where 工资 > 三块九毛八 |
按逻辑表达式筛选
&& || !
and or not
1 | select 姓, 名 from 员工表 where 工资>=两块九毛八 <= 三块六毛五 |
模糊查询
- like、 between and、in、is null
demo1: 查询名字中有 h 的数据
1 | select * from 表 where 名字 like '%h%' |
demo2: 查询员工名中第三个字符为 r, 第五个字符为 y 的员工名和工资
1 | select 姓, 名 from 员工表 where 姓 like '__r_y%'; |
demo3:查询员工名中第二个字符为_的员工名
1 | select 姓名 from 表 where 姓名 like '_\_%'; // \此时是转义字符 |
上面的转义查询也可以写成
1 | select 姓名 from 表 where 姓名 like '_$_%' escape '$'; // 表名$是转义字符 |
- between and
优点:
1、简洁
2、包含临界值
⚠️: 两个临界值不要调换顺序
demo: 查询编号在 100-120 之间的员工
1 | -- and |
- in
1、判断某字段的值是否属于 in 列表中的某一项;
2、in 列表中的值类型必须一致, 或者兼容
demo1: 查询员工编号是 hardy1, hardy2 中的一个员工名和员工编号
1 | -- or |
- is null
=或<>不能用于判断 NUll 值
is null 或者 is not null 可以用来判断 NULL
demo1: 查询 null
1 | select * from 员工表 where 奖金 is null |
demo2: 非 null
1 | select * from 员工表 where 奖金 is not null |
- <=>
和 is null 一样的用法
demo: 查询工资 3000 的员工
1 | select * from 员工表 where 工资 <=> 3000 |
is null: 仅仅可以判断 null 值;
<=>: 既可以判断 null 值, 又可以判断普通值(推荐)
排序查询
order by
- asc 升序
- desc 降序
1
select * from 员工表 order by [asc | desc] // 默认升序asc