MySQL学习记录笔记

1.模糊查询

% 表示任意位    _表示一位    前面添加“\” 可以转义

user表

iduserName
1William
2

Milliam 

3M_illiam

 

select * from user where userName like '%illia%';

1William
2

Milliam 

3

M_illiam

select * from user where userName like '_illia%';

1William
2

Milliam 

select * from user where userName like '\_illia%';

3M_illiam

 

2.分组函数,只有在group by (出现或者默认)能使用

max()  min() count() avg() sum()

3.having 和where

where是查询前的筛选,作为查询条件,having查询后筛选,如果能用where尽量使用where,实在不行再用having

4.拼接函数

https://www.cnblogs.com/haw2106/p/10735500.html

替换函数

#sql语法: 
#UPDATE 表名 SET 字段名=replace(字段名, ‘被替换字符串’, '用来替换的字符串') ;

#sql: 
UPDATE `member` SET `phone`=replace(`phone`, '\'', '') ;

5.存储引擎

存储引擎是相对于表来说的,不是相对于数据库的,每张表可以有一个引擎,同一个数据库中不同的表可以使用不同存储引擎。

innoDB支持行锁,支持事务,索引和数据存在同一个文件,查询效率相比于MyISAM更高

MyISAM 支持表级锁,不支持事务,索引和数据不在同一个文件,相同情况下会比innoDB效率低,因为会多一次IO

 

6.索引 

排好序的数据结构

数据结构演示网站:https://www.cs.usfca.edu/~galles/visualization/Algorithms.html

二叉树 

缺点:如果一直递增的数据,那么会出现单边增长,类似于链表,查询效率低

红黑树

缺点:虽然能平衡可是层级会很多

hash

缺点:只查询相等的情况下虽然效率高,但是不支持范围查询基本上没什么用

B tree

非叶子结点也存储数据,浪费了空间

B+tree

查询次数较少,非叶子节点只需要维护一个值(8B)和一个指针(6B),大概14B,每个块默认是16K,

三层查询结构已经能够支持2000多万行的数据建立索引

非叶子节点不存储数据,只存储索引值和地址块指针

为什么要用主键,而且自增

索引是排序的,如果不是自增会发生裂变,重排,十分影响性能,如果自增那就不会出现这个问题

聚簇索引

在btree的叶子节点上,不同的叶子结点会维护一个双向链表,指向相邻的叶子结点,因为索引是排好序的,所以聚簇索引能够很快的查询到需要的数据。极大提高了查询效率。

最左匹配原则

从索引的第一位开始比对,可以比索引少,只要不跳就不会影响,如果不是从左边第一位开始或者中间跳了,那么不会走该索引,因为索引是排好序的数据结构,有一个不一样,那么索引就不能适用。

 

7.事务

事务特性ACID

原子性

持久性

隔离性

一致性

mysql默认三级事务(可重复读)

事务级别:

读未提交(事务A进行中时能够读取到事务B还未提交的数据,比如事务B插入了数据还未提交,此时如果A读取的话是能读取到的)

缺点:产生脏读现象,因为如果使用了别的事务未提交的数据,而恰好该事务进行了回滚,则读到的数据中包含脏数据

读已提交(事务A进行中时能够读到B已经提交的事务)

缺点:不可重复读,意思是如果A事务还未结束,它如果第一次查询时别的事务未开始操作,当查询以后如果别的事务进行了提交,事务A再次进行相同的查询则不能查询到最开始的结果

可重复读:(事务A进行中时,别的事务读数据进行修改然后提交,对事务A没有影响。如果事务A开始进行了一次查询以后,如果事务B删除或者修改了数据进行提交后,事务A再次进行查询,结果仍然是之前的结果,跟事务B的操作没有任何关系)

缺点:幻读,别的事务已经进行了修改,数据已经发生了改变,但是当前事务查询的任然是事务开启那一刻的数据,读取的数据一旦发生了变化,那么其实查询的结果已经不对了,当前查询的结果只是一个幻想(解决方案,锁方案)

串行化读、序列化读:一旦有一个事务开启别的事务不能进行,只有当前事务结束后别的事务才能开始执行,保证了查询到的结果都是正确的。保证了数据的正确性

缺点:效率太低

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值