MySQL的基本知识

一、MySQL事物的基本要素?

  原子性    一致性    隔离性    持久性

二、MySQL事物的并发问题?

https://www.cnblogs.com/kangshuai/p/5735374.html

     1)脏读:事务A读取了事务B更新的数据,然后事务B回滚,那么事务A读取到的数据就是脏数据


2)不可重复读:事务A多次读取同一数据,事务B在事务A多次读取的过程中对数据做了更新并提交,导致事务A多次读取同一数据的结果不一致,侧重于修改


3)幻读: 系统管理员A将数据库中所有的学生的成绩从具体分数改为ABCD等级,同时系统管理员B插入了或删除了一条具体分数的记录,导致A发现结束后还有一条数据没有改过来或是丢失了,就好像出现了幻觉一样

注意:

     1、事务隔离级别为读提交时,写数据只会锁住相应的行


2、事务隔离级别为可重复读时,如果检索条件有索引(包括主键索引)的时候,默认加锁方式是next-key 锁;如果检索条件没有索引,更新数据时会锁住整张表。一个间隙被事务加了锁,其他事务是不能在这个间隙插入记录的,这样可以防止幻读。


3、事务隔离级别为串行化时,读写数据都会锁住整张表


4、隔离级别越高,越能保证数据的完整性和一致性,但是对并发性能的影响也越大。


四、mysql中between...and..的使用,及时间范围的查询?

https://www.cnblogs.com/zjdxr-up/p/8383693.html


五、MySQL主从复制与读写分离原理?

  https://www.cnblogs.com/KTblog/p/5122825.html

六、Mysql 主从同步延迟原理及解决方案?

https://www.cnblogs.com/cnmenglang/p/6393769.html


七、MySQL的join与left join有什么区别?

join相当于我们平时用的where,就是把两张表中同时满足a.id=b.id的数据找出来。

无区别


八、MySQL的in与between and 有什么区别?

Between ...  and...

between是指属性值在min和max之间,包括min和max,In

IN

in则是将括号内的数当做数组处理,只有当记录的属性值等于括号内的数值之一时,该记录才会被选中

九、MySQL中EXPLAIN的作用?

            模拟Mysql优化器是如何执行SQL查询语句的,从而知道Mysql是如何处理你的SQL语句的。分析你的查询语句或是表结构的性能瓶颈。

十、MySQL有哪些索引?

普通索引:仅加速查询

唯一索引:加速查询 + 列值唯一(可以有null)

主键索引:加速查询 + 列值唯一(不可以有null)+ 表中只有一个

组合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并

全文索引:对文本的内容进行分词,进行搜索

十一、什么是复合索引?

用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引); 复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引; 同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,宽索引也就是索引列超过2列的索引; 设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效;

十二、对于普通索引而言 在使用like进行通配符模糊查询时,如果首尾之间都使用了通配符,索引会怎么样?

索引是无效的

假设查询内容的关键词为'abc'

SELECT * FROM tab_name WHERE index_column LIKE

?'abc%'; ?#索引是有效的

SELECT * FROM tab_name WHERE index_column LIKE

?'%abc'; ?#索引是无效的

SELECT * FROM tab_name WHERE index_column LIKE

?'%cba'; ?#索引是有效的

SELECT * FROM tab_name WHERE index_column LIKE

?'%abc%'; ?#索引是无效的



十三、怎样删除索引?

        dropindex<索引名>;

十四、UNION的作用是什么?

UNION 操作符用于合并两个或多个 SELECT 语句的结果集。

请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同



十五、ORDER BY怎样使用?

order by是用来写在where之后,给多个字段来排序的一个DQL查询语句。

select 字段列表/* from 表名 where 条件 order by 字段名1 asc/desc

十六、MySQL中GROUP BY的作用?

“Group By”从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。


十七、MySQL中数学函数有哪些?

rand()??顾名思义,是用来生成随机数用的

format(x,y)??函数,功能是将一个数字x,保留y位小数,并且整数部分用逗号分隔千分位,小数部分进行四舍五入

abs();??求一个数的绝对值;absolute

sqrt();?求一个数的平方根。sqrt是sqruar(平方,矩形) ,root(根)的缩写。

mod(x,y)??x除数,y被除数。结束是余数。

ceil()??进一取整。

floor()舍一取整

format?会自动进行千分位,下面我们来看看round函数,进行四舍五入。

 truncate(x,y)??比较霸道,不管四舍五入,直接把x,的y位小数直接干掉。

sign()?返回当前结果得符号,如果是负数返回-1,如果是0 返回0 如果是正数,返回1

power()??幂运算

十八、MySQL中 ALTER的作用是?

当我们需要修改数据表名或者修改数据表字段时,就需要使用到MySQL ALTER命令

十九、MySQL中获取时间的函数?

?获得当前日期+时间(date

+ time)函数:now()

获得当前日期+时间(date + time)函数:sysdate()

获得当前日期(date)函数:curdate() 等同于:current_date(),current_date

获得当前时间(time)函数:curtime() 等同于:current_time(),current_time

获得当前 UTC 日期时间函数:utc_date(),utc_time(), utc_timestamp()

二十、Mysql分表和分区的区别、分库分表介绍与区别?

http://www.cnblogs.com/langtianya/p/4997768.html

二十一、MySQL的缓存池?

缓冲池概念:缓冲池简单来说就是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响。在数据库当中读取页的操作,首先将从磁盘读到的页存放在缓存池中,这个过程称为将页“FIX”在缓冲池中。下一次再读相同的页时,首先判断该页是不是在缓冲池中。若在,直接读取。否则,读取磁盘上的页。

二十二、varchar与char的区别?

https://www.cnblogs.com/webph/p/6679815.html

二十三、select

into与create table的区别?

nsert? into? table1(columns1,columns2) select?columns1,columns2? from? table2;?

从table2中查询的结果插入到table1中,前提是table1和table2已经存在;?

oracle中不支持select columns1? into? table2??from?? table1;?

其语法为 create.? as..select,有以下三种方式;?

1. create table table1 as select? * from table2? where1=2;?

创建一个表结构与table2一模一样的表,只复制结构不复制数据;?

2.create? table table1? as? select *?? from table2? ;?

? 创建一个表结构与table2一模一样的表,复制结构同时也复制数据;?

3.create? table table1(columns1,columns2) as select?columns1,columns2? from table2;??

创建一个表结构与table2一模一样的表,复制结构同时也复制数据,但是指定新表的列名;

二十四、mysql的主从复制是怎么实现的,数据同步的整体流程是怎么样的?

mysql的主从复制

1. Salve的IO线程会读取mastr.info文件中配置好的主库信息,比如说存放的有:Master数据库的用户名、密码、端口、还有Master的binlog索引位置;

2. 拿到信息之后就带着信息去链接Master的主库IO线程

3. 当主库的IO线程先检查SLave传过来的配置信息是否正确,如果正确,就拿着Slave传过来的binlog索引位置和Master库的binlog文件中最后一个索引位置进行对比,如果一致就陷入等待状态,等待Master的binlog索引位置更新;

4. 如果不一致就把Slave传过来的binlog索引位置往后的所有SQL语句包括最后一条SQL语句的索引位置发送个给Slave的IO线程;

5. Slave的IO线程拿到信息之后,先把Master传过来的binlog索引在Slave的master.info文件中进行更新;

6. 然后再把Master传过来的SQL语句写入到relay文件中,然后继续循环执行第二个步骤;

7. Slave的SQL线程会一直持续的观察relay日志文件中是否有改动,如果没有就继续监听;

8. 如果发现relay中有变动,那么就获取变动的内容转换为SQL语句,并且把SQL语句在Salve的数据库中进行执行

 数据同步的整体流程

二十五、mysql的常见的存储引擎有哪些?

    ?InnoDB存储引擎  MyISAM存储引擎   MEMORY存储引擎

二十六、各个存储引擎的优缺点是什么?

Innodb  优点

灾难恢复性好

支持事务

使用行级锁

支持外键关联

支持热备份

对于InnoDB引擎中的表,其数据的物理组织形式是簇表(Cluster

Table),主键索引和数据是在一起的,数据按主键的顺序物理分布

实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且会自动创建散列索引以加快数据的获取

支持热备份


MEMORY 存储引擎

缺点如下:


使用表级锁,虽然内存访问快,但如果频繁的读写,表级锁会成为瓶颈

只支持固定大小的行。Varchar类型的字段会存储为固定长度的Char类型,浪费空间

不支持TEXT、BLOB字段。当有些查询需要使用到临时表(使用的也是MEMORY存储引擎)时,如果表中有TEXT、BLOB字段,那么会转换为基于磁盘的MyISAM表,严重降低性能

由于内存资源成本昂贵,一般不建议设置过大的内存表,如果内存表满了,可通过清除数据或调整内存表参数来避免报错

服务器重启后数据会丢失,复制维护时需要小心

MyISAM引擎

特性如下:

不支持事务

使用表级锁,并发性差

主机宕机后,MyISAM表易损坏,灾难恢复性不佳

可以配合锁,实现操作系统下的复制备份、迁移

只缓存索引,数据的缓存是利用操作系统缓冲区来实现的。可能引发过多的系统调用且效率不佳

数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能


二十七、怎么修改mysql中的表结构(关键词)

一、字段

1、添加字段:

alter table `product` add `inventory` int(11) NOT NULL

COMMENT '库存'

添加多个字段:加括号,逗号分隔

alter table `category` add (

`company` tinyint(4) NOT NULL COMMENT '公司',

`date` varchar(40) NOT NULL COMMENT '日期',

`number` varchar(200) NOT NULL COMMENT '数量'

)

2、删除字段:

alter table `category` drop column `date`1

删除多个字段:逗号分隔

alter table `category` drop column `date`,drop column`number`1

3、修改字段属性:

示例:将 award 表的 count 字段,名称修改为 company,并设置相关属性

alter table `award` change `count` `company`

varchar(200) not null comment '公司'

二、索引

1、 添加索引字段

主键索引:primary key

alter table `award` add primary key (`id`);

普通索引:index

alter table `award` add index `key_a_c`(`award`,`count`);

全文索引:fulltext

alter table `award` add fulltext `key_a_c`(`award`,`count`);

唯一索引:unique

alter table `award` add unique `key_a_c`(`award`,`count`);

2、删除索引:

alter table `award` drop primary key `id`

alter table `award` drop index `key_a_c`

alter table `award` drop fulltext `key_a_c`

alter table `award` drop unique `key_a_c`

3、显示所有索引

show index from `award`;

二十八、mysql的存储程序是什么

https://blog.csdn.net/zhou520yue520/article/details/81072324

二十九、mysql的存储过程是什么

https://www.cnblogs.com/chenpi/p/5136483.html

三十、MySQL中%是什么?怎么使用?

SQL 中的 % 标示通配符, 匹配任何字符, 例如:

select * from TableName where name like 'a%'; // 可匹配 a开头的任何字符串

是正则中的 * 因为正则里 + 是至少1个. * 可以0个

三十一、MySQL中like的用法?

https://blog.csdn.net/qq_27563511/article/details/80879881

你可能感兴趣的:(MySQL的基本知识)