一、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