为什么要使用数据库
通过不同的存储数据的方式,就能发现使用数据库比存储在内存中,数据可以长久保存,数据库比文件存储数据因为有了SQL语句,不管是查询还是管理数据都更加方便。
数据保存在文件
数据存储在文件的优点是数据可以永久保存,但是缺点就是查询数据不方便,操作繁琐,并且速度还要比内存操作慢,有频繁的IO操作。
数据保存在内存
数据存储在内存中,优点是存取速度快,但是缺点也很明显就是数据不能长久保存,且数据易丢失。
数据保存在数据库
数据存储在数据库中,优点是数据永久保存,使用SQL语句,查询方便效率高,管理数据方便。
什么是SQL
结构化查询语言统称为SQL,是一种数据库查询语言,它可以适用于大多数的数据库管理系统,主用于存取数据、查询、更新和管理关系数据库系统。
什么是MySQL
MySQL是一个关系型数据库(同样是关系型数据库的还用Oracle、SQL server等),由瑞典MySQLAB公司开发,属于Oracle旗下产品。在WEB应用方面,MySQL是最好的RBDMS(关系型数据库系统)之一,在Java企业级开发中,因为MySQL是开源的,因此方便进行扩展。
数据库三大范式是什么
第一范式:每个列都不可以再拆分。
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。比如货物表中,有货物ID、货物名称、货物类型、货物备注,货物名称是完全依赖于货物ID的,但货物备注依赖于货物类型,因此就不能是第二范式。
第三范式:在第二范式的基础上,非主键列只能依赖于主键,不依赖于其他非主键。其实就是不能存在传递依赖,主键并不能完全决定一个非主键属性。
MySQL有关权限的表都有哪几个
MySQL服务器通过权限表来控制用户对于数据库的访问,权限表存放在MySQL数据库中,通过mysql_install_db脚本初始化。这些权限表分别user,db,table_priv,columns_priv和host。
user权限表:记录允许连接到服务器的用户账号信息,里面的权限是全局级的。
db权限表:记录各个账号在各个数据库上的操作权限。
table_priv权限表:记录数据表级的操作权限。
columns_priv权限表:记录数据列级的操作权限。
host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受GRANT和REVOKE语句的影响。
MySQL日志
MySQL二进制日志 binlog
二进制日志(binlog)记录了所有的数据定义语言语句(DDL)和数据操纵语言语句(DML),但不包括数据查询(select、show)。MySQL的二进制日志是事物安全型的。
作用:灾难时数据库恢复;MySQL的主从复制。在MySQL8中,默认二进制日志是开启着的
show variables like '%log_bin%'
//通过该语句查找相关参数
binlog日志还包括二进制日志文件(后缀名为.00000* 该文件后缀随着每个二进制日志文件放满后,开启新的二进制日志文件,后缀名自增1)用于记录所有DDL和DML的事件语句。二进制日志索引文件(后缀是.index)用于记录所有二进制文件。
MySQL的binlog有几种录入格式?分别有什么区别?
MySQL的binlog有三种录入格式,statement、row和mixed。
statement
是基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中。比如对数据进行update的修改操作,statement是记录update这个SQL语句。
row
基于行的日志记录,记录的是每一行的数据变更(数据库默认),用上述update的例子,row是记录进行update这个操作前后的数据记录。
mixed
混合了statement和row两种格式,默认采用statement,在某些特殊情况下会自动切换为row进行记录。
想要查看二进制日志文件可以使用以下语句:
mysqlbinlog [参数选项] logfilename
参数选项参考以下内容:
日志删除
对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清楚,将会占用大量磁盘空间。
//删除全部binlog日志,删除之后,日志编号,将从binlog.000001重新开始
reset master
//删除******编号之前的所有日志
purge master logs to 'binlog.******'
//删除日志为“yyyy-mm-dd hh24:mi:ss”之前产生的所有日志
purge master logs before ‘yyyy-mm-dd hh24:mi:ss’
在MySQL配置文件中可以配置二进制日志的过期时间,超过时间的二进制日志文件会被自动删除。
show variables like '%binlog_expire_logs_seconds%';
查询日志
查询日志中记录了客户端所有的操作语句,也就是包括所有DDL语句,而二进制日志是不会记录查询语句日志的。在默认的情况下,查询日志是不开启的,需要对MySQL配置文件/etc/my.cnf 进行以下配置:
#该选项用来开启查询日志,可选值: 0或者1 ; 0代表关闭,1 代表开启
general log=1
#设置日志的文件名,如果没有指定, 默认的文件名为host name.log
general log_ file=mysql query.log
慢查询
慢查询日志记录了所有执行时间超过long_query_time设置值并且扫描记录数不小于min_examined_row_limit的所有的SQL语句的日志,默认未开启。long_query_time默认为10s,最小为0,精度可以到微秒。 慢查询日志存放在localhost_slow.log中
#慢查询日志
slow_query_log=1
#执行时间参数
long_query_time=2