Mysql
1.什么是数据库?
数据库就是一个存放计算机数据的仓库,这个仓库是按照一定的数据结构来对数据库进行组织和存储的,可以通过数据库提供的多种方法来管理其中的数据。
1.什么是外键?:外键的主要作用是保持数据的一致性、完整性。
2.什么是索引?:索引相当于书中的目录,可以提高数据检索的效率,降低数据库的IO的压力。MySQL在300万条记录左右性能开始逐渐下降,虽然官方文档说500~800w记录,所以大数据量建立索引是非常有必要的
3.什么是行锁定与锁表?:可以将一张表锁定和可以单独锁一行的记录。为了防止你在操作的同时也有别人在操作。
4.什么是事务?:事务是由一步或几步数据库的操作。这系列操作要么全部执行,要么全部放弃执行。
5.数据库的类型(关系与非关系)
关系型数据库:支持事务,使用表结构,复杂性高,读写性能差,固定的表结构,数据存储不够灵活。
非关系型数据库:存储格式灵活,读写速度快,可以使用磁盘或随机存储器作为载体,具有高扩展性,但不支持sql语句,无事务处理。
2.mysql的四大事务特性有哪些?
(1)原子性:事务是应用中不可再分的最小执行体,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。(事务要么成功,要么撤回)
(2)一致性:事务执行的结果,必须使数据库从一个一致性状态,变到另一个一致性状态。比如:当数据库中只包含事务成功提交的结果时,数据库处于一致性状态。一致性是通过原子性来保证的。
(3)隔离性:当涉及到多用户操作同一张表时,数据库会为每一个用户开启一个事务。各个事务的执行互不干扰,任意一个事务的内部操作对其他并发的事务都是隔离的。定义级别就是为了解决数据在高并发下所产生的问题:脏读、不可重复读、虚读(幻读)。事务隔离级别如下:
(4)持续性:持续性也称为持久性指事务一旦提交对数据所做的任何改变,都要记录到永久存储器中,通常是保存进物理数据库。即使数据库崩溃了,也要保证事务的完整性。
总结:↓
原子性:事务执行的最小单位,要么成功,要么失败。
一致性:在事务开始之前和完成之后,数据都必须保持一致状态,必须保证数据库的完整性。
隔离性:事务与事务间互不影响。
持久性:事务中通过SQL语句产生的信息会写入到磁盘中。
3.数据库引擎
innodb:支持事务,支持行锁定
myisam:有较高的查询速度,但是不支持事务
memory(满破瑞):需要很快的读写速度但是对安全性要求不高的话可以使用,但是对表的大小有要求。支持锁表不支持锁行。
4.索引类型有四种
主键索引 唯一索引 普通索引 全文索引
5.mysql有那些数据类型?
数据类型:1.整型(int)2.浮点型(float)3.字符串(char)4. 枚举型(enum) 5.日期型
6.char和varchar有什么区别?
char是固定长度 ,varchar 是可浮动长度
7.数据库的增删改查
创建表:create table 表名 (k卫特)
查看表:select * from 表名(蛇来个特)
表插入:insert into 表名
修改表:alter table 表名 add 字段 alter table 表名 change 旧的字段 新字段名 (奥te.儿er)
删除数据 delete from 表名 where id=1
删除字段 alter table 表名 drop 字段名;
删除表 drop table 表名; (抓普)
多条件查询:select 字段1,字段2 from 表名 where 条件 or 条件;select 字段1,字段2 from 表名 where 条件1 and 条件2;
创建用户:grant 权限列表 on 库名.表名 to '用户名'@'客户端主机' IDENTIFIED BY '密码'; (怪次)
刷新权限:flush privileges;
左右外链接查询:在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录,那么在相关联的结果集行中列显示为空值(NULL)。
DDL数据库定义语言:CREATE(k喂特) DROP(抓普) ALTER(奥te.儿er)
DML数据库操纵语言:插入数据INSERT、删除数据DELETE、更新数据UPDATE
DCL数据库控制语言:控制用户的访问权限GRANT、REVOKE (怪吃)(喂饱克)
DQL数据库查询语言:查询数据SELEC
8.数据库逻辑备份和物理备份的区别?
物理备份包含:1.完全备份 2.增量备份 3.差异备份 (xtrabackup)
逻辑备份:mysqldump(自带备份工具MySQL当普)
区别: 物理备份: 备份的是数据库文件,适用于大型数据库环境,不受存储引擎的限制,但不能恢复到不同的MySQL版本。
逻辑备份: 备份的是建表、建库、插入等操作所执行SQL语句,适用于中小型数据库,效率相对较低。
(小常识)取决库的大小来定,一般来说100G内的库,可以考虑使用mysqldump来做,因为mysqldump更加轻巧灵活,备份时间选在业务低峰期,可以每天进行都进行全量备份(mysqldump备份出来的文件比较小,压缩之后更小)。
100G以上的库,可以考虑用xtranbackup来做,备份速度明显要比mysqldump要快。一般是选择一周一个全备,其余每天进行增量备份,备份时间为业务低峰期。
本身为客户端工具:
远程备份语法: # mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
本地备份语法: # mysqldump -u用户名 -p密码 数据库名 > 备份文件.sql
9.主从复制原理(主库写,从库读,降压)
当主库把更改的数据记录到binlong(二进制)日志中,从库开启io线程和sql线程,io线程读取binlong(二进制)日志,并将内容记录到从库的中继日志,sql线程读取中继日志,并执行,达到数据一致。(两种方式):M-S 架构GTID 基于事务ID复制/通过binlog恢复
10.读写分离是怎么做的?(需要使用先部署jdk在部署中间件mycat )
主库负责处理写入操作,而从库只负责处理select查询,让数两者分工明确能提高据库整体读写性能
Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务,是实现对主从数据库的读写分离、读的负载均衡。
11.读写分离的好处
1. 分摊服务器压力,提高系统的处理效率
2. 在写入不变,大大分摊了读取,提高了系统性能。当读取被分摊后,又间接提高了写入的性能。所以,总体性能都提高了。
3. 增加冗余,提高服务可用性,当一台数据库服务器宕机后可以调整另外一台从库以最快速度恢复服务
12.Mysql优化
主要有两个主要方面:安全、性能、还有参数、架构、sql语句等方面
- 安全方面:可以把默认端口3306改为其他的,对用户降权,以普通用户运行mysql即可,开启二进制日志文件,最好在禁止一下root账户远程访问
- 性能方面:升级硬件设备,可以给主机选择合理的cpu,内存调大,增加硬盘,可以对Linux系统内核参数优化,数据库优化的话可以对执行计划,索引,sql改写等等优化
- 参数优化: innodb的buffer参数调大,连接数调大,缓存的参数优化
- 架构优化: 主从,读写分离,一主多从,架构调整。
5)sql语句优化: 协助开发优化,开启慢查询sql,查看是否没有索引,是否需要借助redis缓存,es等。