数据库总结


1.MySQL的使用
2.索引(MySQL高效最主要的手段)
3.事务(MySQL稳定的使用)
4.其他 MySQL执行引擎/MySQL日志
InnioDB(默认引擎)
MyIsam(事务,快)

数据库的操作

1.数据库操作

查询所有数据: show databases;
删除数据库: drop database db_ name ;
使用数据库: use db_ name
创建数据库: create database db_ name character set ut f8mb4;

2.表操作

创建表: create table table_ name(…) ;
删除表: drop table table_ name;
查询所有表: show tables;
修改表结构: alter table table_ name add clumom字段名类型;
新增数据:
添加单条数据: insert into table_ name(字段名…) values(…)
多行添加: insert into table_ name(字段名…) values(…), (…)
修改数据:
update表名set 字段名=值where…
清空数据: delete
全列查询: select * from 表名;
指定列的查询: select列名from 表名; ( 正确使用姿势)
表达式查询: select math+10 from表名; [不用, 禁止使用]
别名查询: uname -> username
select uname as username from 表名。
聚合查询:
count ()
sum()
avg()
max()
min()
去重: select distnict列名from 表名;
排序: order by成绩desc/asc;

where查询

在这里插入图片描述
分页查询:limit
select * from exam_result limit s,n; 从偏移位置 为s的地方,取出n条数据。

表的约束:

物理外键(不用)--->逻辑外键
物理删除(不用)--->逻辑删除
表的关系:
1对1 
1对多 
多对多(最少需要3张表)需要中间表

多表查询

内联查询

语法:
select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连 接条件 and 其他条件;
select 字段 from 表1 别名1,表2 别名2 where 连接条件 and 其他条件;
建议:多张表联合查询的时候,去找每个表之间的关系。
在这里插入图片描述

外联查询

左联查询

在进行连接查询的时候,以左边的表为准
在这里插入图片描述
右联查询

在这里插入图片描述
自连接
把一张表 看做两张表来使用。

索引

在进行mysq1 查询的时候尽量使用主键进行查询(性能)。
面试题:普通索引和主键索引?
答:主键索引它的非叶子节点存储的所有的数据,当我们根据主键查询响应节点信息之后就可以拿到这个整个数据;对于普通索引来说,当我们根据索引得到节点信息之后,只能得到这个节点的主键信息,然后再根据这个主键信息去查询整体数据的内容,这个过程叫做回表查询,因此普通索引的查询性能是比较低,而主键索引的性能比较高。

创建索引

1.普通索引

create index 索引名 on 表名(字段)

2.主键索引:无需创建
3.唯一索引

create unique index 索引名 on 表名(字段)

4.组合索引

create index 索引名 on 表名(字段A,字段B...

查看一个表的所有索引

show index from 索引

删除索引

drop index from 索引 on 表名

索引注意事项

1.在生产服务不要直接执行添加索引的操作(创建索引的过程非常耗时,且数据量越大创建的时间就越长)。
2.对于多读(查询)场景适合使用索引,而对于添加删除比较多的场景,那么索引就不适用。
3.注意查询的时候,不能触发索引查询。比如在列上进行赋值运算。

什么情况下不会触发索引?

1.当对一个列(已经设置了索引的列),进行赋值查询的时候。
2避免使用like查询,当使用模糊查询的时候有可能不触发索引,比如当使用like‘%XXX%’不会触发索引,当使用like‘XXX%’是可以触发索引的。
3当使用的是组合索引的时候,一定要注意遵循最左匹配原则。
最左匹配原则:从最左边进行查询

例: 表名(A,B,C,)
可以触发索引的:
where A=X,B=X;
where A=X;
不会触发索引的:
where B=X,A=X;

4.尽量避免使用or查询,又可能导致索引不生效。
5.不要使用 != <>都会导致索引不生效。
6.如果是字符串查询,一定要加上单引号,否则索引不生效。

如何优化MySQL的性能

1.在查询比较多的关键列上加索引。
2.开启慢查询日志,找到执行比较慢的SQL,针对性的进行优化。
3.能使用主键索引的时候,经常使用主键索引。
4.分表(垂直分隔)分库(水平分隔)。
5.提高数据库的硬件配置,更换一个读写性能更好的磁盘,更换一个更大的内存。

主键索引和普通索引的区别?

1.主键索引不需要显示的创建。
2.主键索引不能删除,而普通索引可以。
3.主键索引查询更快,而普通索引因为有回表查询,索引性能没有主键索引性能高。
如何开启慢查询?
1.修改配置文件
修改配置文件my.cnf,在[mysqlId]下方加入:

[mysqlId]
slow_query_log=ON
slow_query_log_file=/usr/locla/mysql/data/slow_query.log
slow_query_time=1

2.重启MySQL服务

事务

事物的特性(ACID):

1.隔离性:并发事务执行时,隔离问题,不能相互影响
2.原子性:要么全部成功,要么全部失败
3.持久性:事务执行完成之后,结果要一直保持下来
4.一致性:事务执行前后,数据要保证是正确的

MySQL事务执行时存在的问题

脏读:事务A读取到了事务B没提交的数据,事务B回滚。事务A读到了一条不存在的数据
不可重复读:事务A使用相同的查询查询条件,读取到了不一样的结果,因为这个过程中事务B修改了数据
幻读:事务A把数据修改了之后,事务B又新增/删除了一条数据,导致结果和事务A预期的不一致

不可重复读和幻读的区别:

不可重复读的侧重点描述的是修改操作,而幻读描述的是添加或删除操作。

事务隔离级别

在这里插入图片描述

读未提交
读已提交
可重复读:默认隔离级别
串行化:性能不高
幻读问题解决方案:
1.MVCC
2.gap间隙锁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值