笔记:慕课网MySQL面试
最后更新于
这有帮助吗?
最后更新于
这有帮助吗?
答题技巧:
当前公司使用到的版本
枚举所用发行版的优点,说明为什么不使用官方版本
知识点:
MySQL常见的发行版
MySQL官方企业版(收费)、社区版(免费)
Percona MySQL(基于社区版二次开发,免费提供了一些类似企业版的收费工具)
MariaDB(MySQL创始人基于其源码开发的另一个数据库)
各个发行版之间的区别及优缺点
答题技巧:
是否升级:
升级可以给业务带来的好处
是否可以解决业务上某一方面的痛点
是否可以解决运维上某一方面的痛点
升级可能给业务带来的风险、影响
对原业务程序的支持是否有影响
对原业务程序的性能是否有影响
如何升级:
数据库升级方案的制定
评估受影响的业务系统
升级的详细步骤:对待升级数据库进行备份;升级Slave服务器版本;手动进行主从切换;升级Master服务器版本;升级完成后进行业务检查。
升级后数据库的环境检查
升级后的业务检查
升级失败的回滚方案
升级失败回滚步骤
回滚后的数据库环境检查
回滚后的业务检查
知识点:
MySQL8.0新特性
知识点:
如何定义数据库帐号?
使用用户名@可访问控制列表
格式定义帐号
可访问控制列表一般格式如下:
%
:表示可以从所有外部主机访问
192.168.1.%`:表示可以从192.168.1网段访问
使用CREATE USER命令建立用户
MySQL常用的用户权限
可以使用show privileges;
命令查看权限的作用以及拥有该权限的用户
Admin
DDL
DML
如何为用户授权?
遵循最小权限原则
使用grant命令给用户进行授权
使用revoke命令回收用户权限
数据库用户管理流程规范
最小权限原则
密码强度策略
密码过期原则和限制密码重用原则
密码管理策略(如密码安全强度等 )
导出用户建立及授权语句:pt-show-grants u=username,p=password,h=localhost
在待迁移的实例上执行该语句就会生成授权语句,然后我们切换到目标实例上执行授权语句即可。
Group By
语句的异常原因给出如下数据表:
使用以下语句查询及其结果:
理论上上述语句不应该执行成功,当时在此时不仅成功执行而且还输出了数据,只是输出的数据不符合预期。如果将SQL_MODE参数设置为ONLY_FULL_GROUP_BY
,那么对于GROUP BY
聚合操作出现在SELECT
中的列、HAVING
或者ORDER BY
子句的非聚合列,没有在GROUP BY
中出现将会抛出SQL语法检查报错。
查看当前SQL_MODE:show variables like 'sql_mode';
设置session级别的SQL_MODE:set session sql_mode='ONLY_FULL_GROUP_BY';
如果你需要设置多个值则用,
分隔
遵守ANSI
标准需要给SQL_MODE
设置以下值:
ANSI_QUITES
,将禁止使用双引号来引用字符串,要求使用单引号。
REAL_AS_FLOAT
,将float作为real的同义词(默认是double作为real的同义词)
PIPES_AS_CONCAT
,将||
视为字符串的连接操作符而非或运算符
或者设置SQL_MODE
值为ANSI
常用的SQL_MODE值:
STRICT_TRANS_TABLES
:在事务存储引擎上启用严格模式。
SREICT_ALL_TABLES
:在所有存储引擎上启用严格模式。
ERROR_FOR_DIVISION_BY_ZERO
:不允许0作为除数。
NO_AUTO_CREATE_USER
:在用户不存在时不允许grant语句自动建立用户。
NO_ZERO_IN_DATE
:日期数据内不能含0。
NO_ZERO_DATE
:日期数据不能含0。
NO_ENGINE_SUBSTITUTION
:当指定的存储引擎不可用时报错。
或者设置SQL_MODE
值为TRADITIONAL