1、数据库三大范式是什么?
第一范式:每个列都不可以再拆分(原子性)
概念:
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于逐渐的一部分(唯一性)
概念:
第三范式:对字段冗余性的约束,即任何字段不能由其他字段派生出来,它要求字段没有冗余
概念:
2、mysql有关权限的表都有那几个
MySQL服务器通过权限表来控制用户对数据库的访问,权限表放在mysql数据库里,由mysql_install_db脚本初始化。这些权限表分别uesr、db, table_priv, columns_priv和host
这个权限表不受GRANT和REVOKE语句影响
3、事务的四大特性(ACID)介绍一下
原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;
一致性:执行事务前后,数据保持一致,多个事务的对同一个数据读取的结果是相同的
隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间的数据库谁独立的
持久性:一个事务被提交之后。对它数据库中数据的改变时持久的,既是数据库发生鼓掌也不应爱对其有任何影响
4、索引设计的原则是什么?
5、SQL语句主要分为哪几类?
数据定义语言 DDL(Data Ddefinition Language)CREATE, DROP, ALTER
主要为以上操作 即对逻辑解构等有操作的,其中包括表结构,视图和索引。
数据查询语言 DQL (Data Query Language)SELECT
这个较为好理解,查询操作,以select关键字
各种简单查询,链接查询等 都属于DQL
数据操作语言 DML (Data Manipulation Language)
INSERT, UPDATE, DELETE
主要为以上操作,对数据进行操作
对应上面所说的查询操作DQL与DML共同构建了多数初级程序员常用的增删改查操作
而查询是较为特殊的一种,被划分到DQL中。
数据控制功能 DCL (Data Control Language)
GRANT, REVOKE, COMMIT, ROLLBACK
主要为以上操作,对数据库安全性完整性等有操作的,可以简单的理解为权限控制等
6、MySQL分库分表的目的是?
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表做成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
分库分表常用的中间件如下:
7、什么是死锁?怎么解决
死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。
常见的解决死锁的方法:
8、什么是脏读?幻读?不可重复读?
脏读(Drity Read)读到了其他事务未提交的数据,未提交意味着这些数据可能会回滚,也就是可能最终不会存到数据库中,也就是不存在的数据。读到了不一定最终存在的数据,这就是脏读
可重复读:在一个事务内,最开始读到的数据和事务结束前的任意时刻读到的同一批数据都是一致的。通常针对数据更新操作
不可重复读:在同一事务内,不同的时刻读到的同一批数据可能不一样,可能会受到其他事务的影响,比如其他事务改了这批数据并提交了。通常针对数据更新操作
幻读:假设事务A对某些行的内容坐了更改,但是未提交,此时事务B插入了与事务A更改前的记录相同的记录行,并且在事务A提交之前先提交了,而这时,事务A查询,会发生好像刚刚的更改对于某些数据未起作用。但其实是事务B刚插入进来的。通常针对插入操作
9、视图有哪些特点
视图的特点如下:视图的列可以来自不同的表,是表的抽象和在逻辑意义上建立的新关系。
视图是由基本表(实表)而产生的表(虚表)。视图的建立和删除不影响基本表
对视图内容的更新(DML)直接影响基本表
当视图来自多个基本表时,不允许添加和删除数据
视图的操作包括创建视图,查看视图,删除视图和修改视图
10、SQL的生命周期
11、主键使用自增ID还是UUID
推荐是用自增ID
因为在InnoDB存储引擎中,主键索引是作为聚簇索引存在的,也就是说,主键索引的B+树叶子节点上存储了主键索引以及全部的数据(按照顺序),如果主键索引是自增ID。那么只需要不断向后排列即可,可如果是UUID,由于到来的ID与原来的大小不确定,会造成非常多的数据插入,数据移动,然后导致产生很多的内存碎片,进而造成插入性能的下降。总之,在数据量大一些的情况下,用自增主键性能会好一些,关于主键是聚簇索引,如果没有主键,InnoDB会选择一个唯一键来作为聚簇索引,如果没有唯一键,会生成一个隐式的主键。
12、MySQL主从复制解决了哪些问题
主从复制的作用是
主数据出现问题,可以切换到从数据库。
可以进行数据库层面的读写分离
可以在从数据库上进行日常备份
数据分布:随意开始或停止复制,并在不同地理位置分布数据备份
负载均衡:降低单个服务器的压力,高可用和故障切换:帮助应用程序避免单点失败
13、什么是MySQL的GTID
TID(Global Transaction ID, 全局事务ID)是全局事务标识符,是一个已提交事务的编号,并且是一个全局唯一的编号。
GTID是从MySQL 5.6版本开始在主从复制方面推出的重量级特性。
GTID实际上是有UUID + TID组成的。其中UUID是一个MySQL实例的唯一标识
GTID代表了该实例上已经提交的事务数量,并且随着事务提交单调递增
GTID有如下有点作用:
14、MySQL常用的备份工具
逻辑备份(mysqldump, mydumper)
物理备份(copy,xtrabackup)
差异对比
逻辑备份:分表比较容易
mysqldump备份数据时时将所有sql语句整合在同一个文件中;
mydumper备份数据时时将SQL语句按照表拆分成单个的SQL文件,每个sql文件对于一个完整的表
物理备份:拷贝即可用,速度快
copy:直接拷贝文件到数据目录下,可能引起表损坏或者数据不一致。
xtrabackup对于innodb表是不需要锁表的,对于myisam表仍然需要锁表
15、MySQL备份计划如何制定
一般来说都是看库的大小,100G或者以下的库可以考虑使用mysqldump,因为mysqldump是mysql自带的备份工作,更加轻巧灵活(可以每天都进行备份,mysqldump备份出来的文件比较小,压缩之后更小)
100G以上的库,可以考虑使用xtranbackup来做,备份速度明显要比mysqldump要快