MySQL主要内容:
1、数据库介绍、类型、特性
2、MySQL数据库安装、连接、启动、停止
3、表字段类型介绍、主键约束、表创建语句
4、常用增删改查语句、分组、聚合
5、外键管理、unique字段、表结构修改语法
6、跨表查询,inner join、left join、right join、full join语法
7、复杂SQL语句如group by、子查询、函数的使用
8、索引原理及作用、普通索引、多列索引、唯一索引、全文索引等
9、基于hash&b+树索引的实现原理,索引的优缺点剖析
10、事务原理,ACID特性,应用场景讲解
11、事务回滚
12、触发器的特性,应用场景
13、触发器的增删改查方法
14、存储过程的作用及应用场景
15、创建存储过程,参数传递,流程控制语句if\while\repeat\loop等,动态SQL的创建
16、视图的作用及使用场景,视图的增删改查
17、数据库权限管理,用户管理
18、数据库备份命令及工具讲解
19、基于不同业务的数据库表结构设计、性能优化案例
20、pymysql模块介绍和使用
一、问答题
1、说说你所知道的MySQL数据库存储引擎,InnoDB存储引擎和MyISM存储引擎的区别?
主要有
MyISM:MyISAM存储引擎:不支持事务、也不支持外键,优势是访问速度快,对事务完整性没有要求或者以select,insert为主的应用基本上可以用这个引擎来创建表
InnoDB:支持事务
Memory:Memory存储引擎使用存在于内存中的内容来创建表。每个memory表只实际对应一个磁盘文件,格式是.frm。
memory类型的表访问非常的快,因为它的数据是放在内存中的,并且默认使用HASH索引,但是一旦服务关闭,表中的数据就会丢失掉。
Merge:Merge存储引擎是一组MyISAM表的组合,这些MyISAM表必须结构完全相同,merge表本身并没有数据,对merge类型的表可以进行查询,更新,删除操作,这些操作实际上是对内部的MyISAM表进行的。
MyISM和InnoDB的区别
InnoDB支持事务,而MyISM不支持事务
InnoDB支持行级锁,而MyISM支持表级锁
InnoDB支持外键,而MyISM不支持
InnoDB支持全文索引,而MyISM不支持
InnoDB是索引组织表,MyISM是堆表 (堆表的数据是随机插入的,索引组织表的数据是有序的)
2、MySQL中char和varchar的区别,varchar(50)和char(50)分别代表什么意思?
char(50): 定长,字符的长度为50,浪费空间,存取速度快,数据不足时,会往右填充空格来满足长度。
varchar(50):变长,字符的长度为50,节省空间,存取速度慢,存储数据的真实内容,不会填充空格,
且会在真实数据前加1-2bytes,表示真实数据的bytes字节数。
3、MySQL中int类型存储多少个字节?
int存储4字节,最小值-2147483648,最大值21477483647
4、主键具有什么特征?
唯一且非空
5、简述你对inner join、left join、right join、full join的理解;
多表连接查询:
inner join: 内连接,只连接匹配的行,找两张表共有的部分;
left join: 外连接之左连接,优先显示左表全部记录,在内连接的基础上增加左表有右表没有的结果;
right join: 外连接之右连接,优先显示右表全部记录,在内连接的基础上增加右表有左表没有的结果;
full join:=left join on union right join on ... mysql 不支持full join 但是可以用 union ...
全外连接,显示左右两个表全部记录,在内连接的基础上增加左表有右表没有和右表有左表没有的结果;
6、concat, group_concat函数的作用是什么?
定义显示格式:
concat() 用于连接字符串
eg:select concat('姓名:',name,'年薪:',salasy*12) as annual_salary fromemployee;
concat_ws() 第一个参数为分隔符
eg:select concat_ws(':',name,salary*12) as annual_salary fromemployee;
group by 与 group_concat() 函数一起使用select post,group_concat(name) as emp_members from employee group by post;
7、请介绍事务的实现原理;
事务:用于将某些操作的多个sql作为原子性操作,一旦有某一个出现错误,即可回滚到原来的状态,从而保证数据库数据的完整性。
原子性:一堆sql语句,要么同时执行成功,要么同时失败!
8、索引的本质是什么?索引有什么优点,缺点是什么?
索引是帮助MySQL高效获取数据的数据结构。因此,索引的本质是一种数据结构。
在数据之外,数据库系统还可以维护满足特定查找算法的数据结构,这些数据结构以某种方式指向真实数据,这样就可以在这些数据结构上实现高级查找算法,这种数据结构就是索引。
优点:1、提高数据检索效率,降低数据库的IO成本;2、通过索引对数据进行排序,降低了数据排序的成本,降低了CPU的利用率;
缺点:1、索引实际上也是一张表,索引会占用一定的存储空间;2、更新数据表的数据时,需要同时维护索引表,因此,会降低insert、update、delete的速度;
9、哪些情况下需要创建索引,哪些情况下不需要创建索引?
1、主键自动创建唯一非空索引;2、频繁作为查询条件的字段应该创建索引;3、频繁更新的字段不适合简历索引,因为每次更新不仅仅更新数据表同时还会更新索引表;4、查询中经常排序的字段,可以考虑创建索引;5、如果某个字段的重复数据较多,不适合创建普通索引;
10、请分别介绍ACID代表的意思,什么业务场景需要支持事务,什么业务场景不需要支持事务?
ACID,指数据库事务正确执行的四个基本要素的缩写。
包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。
一个支持事务(Transaction)的数据库,必须要具有这四种特性,否则在事务过程(Transaction processing)当中无法保证数据的正确性。
使用场景:
银行的交易系统
eg:
start transaction;
update userset balance = 900 where name = 'wsb'; #买支付100元
update userset balance = 1010 where name = 'egon'; #中介拿走10元
uppdate userset balance = 1090 where name = 'ysb'; #卖家拿到90元,出现异常没有拿到
rollback;
commit;