云服务器

MySQL基础实用知识集合(一)

2020-08-10 10:36:54 41

小编给大家汇总介绍了mysql的13个基础的知识点,这些都是学习mysql的必备知识,小伙伴们可以参考下。

 

1、Mysql体系架构
 

 

2、MySQL文件结构

1.参数文件:启动MySQL实例的时候,指定一些初始化参数,比如缓冲池大小、数据库文件路径、用户名密码等

-my.cnf读取优先级是从左自右的顺序,但是当默认读取路径都有配置文件时,最后读取的参数的值,会覆盖前面读取的参数的值
 -/etc/my.cnf/etc/mysql/my.cnf/usr/local/mysql/etc/my.cnf~/.my.cnf


2.日志文件:比如:错误日志、二进制日志、慢查询日志、查询日志等等

3.socket文件:当用UNIX域套接字方式进行连接的时候需要的文件。

4.pid文件:MySQL实例的进城ID文件。

5.表结构文件:用来存放MySQL表结构定义文件

6.储存引擎文件:存储引擎正在储存了纪录和索引等数据

 


3:索引

1、概念

索引是对数据库表中一个或多个列的值进行排序的数据结构,以协助快速查询、更新数据库表中的数据。索引的实现通常使用
B_TREE及其变种。索引加速了数据访问,因为存储引擎不会再去扫描整张表得到需要的数据;相反,它从根节点开始,根节点保存了子节点的指针,存储引擎会根据指针快速寻找数据。

 

2、索引的优缺点

优点:大大加快数据的检索速度,这也是创建索引的最主要原因

加速表与表之间的连接

在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间

通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性

 

缺点:时间方面:创建索引和维护索引需要耗费时间,具体地,当对表中的数据进行增加、删除、和修改的时候,索引也要动态的维护,这样降低了数据的维护速度

空间方面:索引需要占物理空间

 

3、什么情况下设置了索引但无法使用

以“%(表示任意0个或多个字符)”开头的like语句,模糊匹配
OR 语句前后没有同时使用索引
数据类型出现隐式转换
对于多列索引,必须满足 最左匹配原则

 

4、什么样的字段适合创建索引

经常做查询选择的字段
经常做表连接的字段
经常出现在 order by ,group by, distinct 字段

 

5、创建和删除索引的语法

5.1.查看表中已经存在的index:show index from table_name;

 

5.2.使用create index 语句对表增加索引。
create index index_name on table_name(column_list);
create unique index index_name on table_name(column_lsit)
说明:table_name、index_name和column_list具有与ALTER TABLE语句中相同的含义,索引名不可选。另外,不能用CREATE INDEX语句创建PRIMARY KEY索引

 

5.3.使用ALTER TABLE语句创建索引
语法如下:
alter table table_name add index index_name(column_list )
alter table table_name add unique(colum_list)
alter table table_name add primary key(column_list)
其中包括普通索引、UNIQUE索引和PRIMARY KEY索引3种创建索引的格式,table_name是要增加索引的表名
column_list指出对哪些列进行索引,多列索引用逗号分隔,index_name可选,缺省时MySQL将根据第一个索引列赋一个名称。另外,ALTER TABLE允许在单个语句中更改多个表,因此可以同时创建多个索引。

 

6、删除索引
drop index index_name on table_name ;
alter table table_name drop index index_name ;
alter table table_name drop primary key ;
其中,在前面的两条语句中,都删除了table_name中的索引index_name。而在最后一条语句中,只在删除PRIMARY KEY索引中使用,因为一个表只可能有一个PRIMARY KEY索引,因此不需要指定索引名。如果没有创建PRIMARY KEY索引,但表具有一个或多个UNIQUE索引,则MySQL将删除第一个UNIQUE索引。
如果从表中删除某列,则索引会受影响。对于多列组合的索引,如果删除其中的某列,则该列也会从索引中删除。如果删除组成索引的所有列,则整个索引将被删除。

 

 

4、锁的类型、锁的粒度、锁的实现?

锁的类型:共享锁(也叫读锁)、排他锁(也叫写锁)

锁的粒度:表锁、行锁

锁的实现:乐观锁、悲观锁

悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次拿数据的时候都会上锁,这样别人想那这个数据就会阻塞直到它拿到锁。传统的关系型数据库很多这种锁机制,比如行锁、表锁、读锁、写锁,在操作之前上锁。JAVA:synchronized关键字 是悲观锁

乐观锁:顾名思义,就很乐观,每次去拿数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,可以使用版本号邓机制。乐观锁适用于多读的应用类型,提高吞吐量

 

 

5、什么是事务?没事务会责会怎么样

事务:在一个事务种的一组SQL,要么都执行,要么都不执行。没有事务会出现脏读、幻读、不可重复读

四大特性:ACID

原子性(automicity):事务种的所有sql,要么全执行,要么全部不执行。
一致性(comsistency):转账前,A和B的全部账户共500+500.转装后 400+600
隔离性(isolation):在A向B转账的整个过程中,只要事务还没有提交(commit),查询A账户和B账户的钱数量不会变化。
持久性(durability):一旦转账成功(事务提交),两个账户的钱就会真的发生变化·

 

 

6、什么是脏读?幻读?不可重复读?什么是事务的隔离级别?Mysql的默认隔离级别是?

脏读:事务A读取了事务B更新的数据,然后B回滚操作,那么A读取到的数据是脏数据。

不可重复读:事务 A 多次读取同一数据,事务 B 在事务A多次读取的过程中,对数据作了更新并提交,导致事务A多次读取同一数据时,结果 不一致。

幻读:系统管理员A将数据库中所有学生的成绩从具体分数改为ABCDE等级,但是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像发生了幻觉一样,这就叫幻读。也就是可以插入新的行记录。

 

事务的隔离级别:

Read uncommitted(读未提交):就是一个事务可以读取另一个未提交事务的数据。会造成脏读,不可重复读。
Read committed(读已提交):就是一个事务要等另一个事务提交后才能读取数据。但还是不可重复读。
Repeatable read(可重复读):就是在开始读取数据(事务开启)时,不再允许修改操作??
Serializable (串行化):Serializable 是最高的事务隔离级别,在该级别下,事务串行化顺序执行,可以避免脏读、不可重复读与幻读。但是这种事务隔离级别效率低下,比较耗数据库性能,一般不使用。
Mysql的默认隔离级别是:Repeatable read!!

 

剩下的几点我们下期再继续分享,敬请期待哦~

睿江云官网链接:www.eflycloud.com

上一篇: 无

微信关注

获取更多技术咨询