type
status
date
slug
summary
tags
category
icon
password
1.数据库:为了增删改查数据。(文件保存数据很蠢很蠢) 2.C R U D:增删改查的专业术语。 3.层次、网状、关系型模型数据库

数据库开始

show databases;
imformation_schema:信息数据库,其中保存着关于 MySQL 服务器所维护的所有其他数据库的信息,如数据库名,数据库的表,表栏的数据类型与访问权限等
mysql:保存了用户信息。
performance_schema:监控 MySQL 运行过程的资源消耗情况。
sys: 通过过视图的形式把 information_schema 和 performance_schema 结合起来,查询出更加令人容易理解的数据。

数据库基本操作

创建数据库
删除数据库
查看创建数据库的 SQL:
回退的语句:
Ctrl + C(^C)
创建数据库设置指定的字符编码
修改数据库字符编码

表操作

进入库:
展示表:
制作表:
有 B 格的写法:
auto_increment 自动增长 用于类似于 ID 的数据(有规律性)
primary key 主键 最主要的 靠它来区分表
comment 注释
not null 不能为空
default 默认值
engine = innodb 数据库引擎类型
展示表结构
删除表
修改表:
添加元素
按位元素
之后
位数
删除元素
修改元素
修改类型
修改表名
清空表

数据操作

插入数据
查看数据
一次插入多条数据
删除数据( 注意 where 后面记得带上数据,否则可能误删多条数据!)
清空表
小细节
delete 与 truncate 清表时,delete 会继续接下来的的顺序编号。
更新数据( 同删除数据一样必须带上 where 不然可能带来灾难性的后果)
查询部分数据
理论部分
DDL data definition language 数据库定义语言 create alter drop show
DML data manipution language 数据库操纵语言 insert update delete select
DCL data control language 数据库控制语言

数据类型

unsigned
表示正值数据
double 类型精度丢失问题
浮点型数据类型会有精度丢失的问题,比如小数位设置 6 位,存入 0.45,0.45 转换成二进制是个无限循环小数 0.01110011100...,无法准确表示,存储的时候会发生精度丢失。
Decimal(定点数)
四舍五入后用字符串类型数据进行存储
VarChar 与 Char
VarChar 为可变长字符串 节省空间 但是性能较低
Char 为定长字符串 空间占用可能较多 但性能高
性能不同原因:VarChar 存储的不仅仅是数据内容,还有字节长度以及节点位置。
Boolean
insert into test values(true/false/1/0);
enum
create table Dmeo(
gender enum('women','man','?')
);
枚举类型只能用枚举列表里面的元素来赋值(也可以通过整数进行存储)
好处:存储实际上使用整数,速度比字符串快,限制数据节省空间。
set 集合
与 enum 相比可以一次选择多个元素
时间
create table Demo(
createdTime date
);
insert into Demo values('2022-04-09 11:23:56');

列属性完整性

主键

设置主键
删除主键
主键的唯一性
一个表里只能存在一个主键(复合主键也为一个主键) 并且主键每行数据都不能为空

唯一键

设置唯一键
删除唯一键
主键和唯一键的区别
1.主键不能为空,唯一键可以为空
2.主键只有一个,唯一键可以存在多个
3.主键可以在别的表里用,唯一键只在自己的表里瞎折腾
数据库完整性
1.保证字段完整 eg.保证存在主键、是设置自动增长,有唯一数据
2.保证数据类型正确
3.考虑表里的字段可能会被其他的表所用
4.自己定义约束

外键

添加外键
后期加入外键
删除外键
先查询 show create table eatery_2;
再删除 alter table eatery_2 drop foreign key eatery_2_ ibfk_1;
设计时最好在定义表时就设置好外键
置空:用于删除数据
级联:用于更新数据
操作

关系型数据库

关系:两张表的共有字段去确定数据的完整性
行:一条数据 一条数据记录 实体
列:一个字段 属性
数据冗余:虽然会占用空间,但是提高了性能。
实体和实体的关系:一对一,一对多,多对多。
Code 范式
1.确保字段的原子性
2.非键字段必须依赖于键字段 说白了就是别他妈没事找事
3.消除传递依赖

数据查询语句

单表查询
select
from
dual
伪表:该表主要目的是为了保证在使用 SELECT 语句中的语句的完整性而提供的。
where
< > = != dddd
/or
in
between and

聚合函数

总和select sum(english) from score;
平均 select avg(english) from score;
最大select max(english) from score;
最小select min(english) from score;
次数select count(id) from score; / select count(*) from score;
like
查询'张'后面带多个字符
'_'个数表示元素多少个字符
order by
升序查询
降序查询
group by
group_concat()
notion image
having
表示对生成的表进行查询,相当于 where
limit
limit 开始位置,结束长度;
distinct all
去重

多表查询

inner join on
注意事项:超过两张表时直接在后面继续续写一次语句。
left/right join on
cross join
有笛卡尔积内味了(数学组合)
notion image
natural join
ps.若两表之间无公共字段,则返回的依旧是笛卡尔积。
using
ps.当两张表为相同字段时,要采用加上using的结构,否则可能empty set输出。

子查询

基本语法
not in
ps.用in或者not in主要是不止一个结果。
exists / not exists
ps.只要有存在就输出。

高级部分

视图

视图的创建与查询
修改视图
删除视图
视图算法
Merge算法
合并算法,每当执行的时候,先将视图的sql语句与外部查询视图的sql语句,合并在一起,最终执行;这样操作对效率基本上没有什么影响
Temptable
临时表算法,创建一个临时表用于数据的填充以及查询,当数据量越大时,效率越低,且该视图无法进行update的操作。

事务

开启事务
回滚事务
提交事务
notion image
保存回滚点
回到回滚点
notion image
特性:ACID(InnoDB引擎下)
原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。

索引

增删改很慢,查很快
创建索引
添加索引
删除索引

扩展

delimiter更改结束符号
procedure存储过程
执行存储
notion image
函数
数字
rand()随机数
ceil()向上取整
round()向下取整
floor()向下取整
truncate(112,2)截取数字
字符串
ucase()大写
lcase()小写
left/right('fuck',2)截取
substring('fuck',1,3)截取中间
concat('fu','ck')拼接字符串
时间
unix_timestamp()时间毫秒值
year/month/day(now())获取当前年/月/日
加密
sha('fuck');