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 等

“image”
“image”

超基础 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
2
3
4
create table 表名 (
字段名 字段类型,
字段名 字段类型
)
插入数据
1
insert into `tb_user` (name, age) values ('hardy', 19);
查看表结构
1
desc 表名
得到表结构
得到表结构
查看服务器的版本
  1. 登陆到 mysql 服务端
1
select version();
  1. 没登陆到 mysql 服务端
1
mysql --version   ||   mysql -V
起别名
1
2
select 100%98 as 结果
select name as 名字, age as 年龄 from tb_user
select .. as  别名
select .. 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
2
select * from tb where 工资 > 三块九毛八
select 姓, 名 from 员工表 where 工资 <> 三块九毛八 // 可以写!= 也不会报错, 但是比较推荐<>
按逻辑表达式筛选

&& || !
and or not

1
2
select 姓, 名  from 员工表 where  工资>=两块九毛八 <= 三块六毛五
select * from 员工表 where not( 员工编号 < 90 or 员工编号 >110 and 工资 > 三块九毛八 )
模糊查询
  • 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
2
3
4
5
-- and
select * from 员工表 where 编号 >= 100 and 编号 <= 120

-- between and
select * from 员工表 where 编号 between 100 and 120;
  • in
    1、判断某字段的值是否属于 in 列表中的某一项;
    2、in 列表中的值类型必须一致, 或者兼容
    demo1: 查询员工编号是 hardy1, hardy2 中的一个员工名和员工编号
1
2
3
4
5
-- or
select 员工名, 员工编号 from 员工表 where 工种 = 'hardy1' or 工种 = 'hardy2'

-- in
select 员工名, 员工编号 from 员工表 where 工种 in (‘hardy1’, 'hardy2')
  • 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