模块一:数据库基础知识
1、为什么要使用数据库
①数据保存在内存
优点:存取速度快
缺点:数据不能永久保存
②数据保存在文件
优点:数据永久保存
缺点:速度比内存操作慢,频繁的IO操作;查询数据不方便
③数据保存在数据库
数据永久保存 ;使用SQL语句,查询方便效率高 ;管理数据方便
2、什么是SQL?
结构化查询语言简称SQL,是一种数据库查询语言
作用:用于存取数据,查询,更新和管理关系数据库系统
3、什么是MySQL?
MySQL是一个关系型数据库管理系统,由瑞典
MySQLAB
公司开发,属于
Oracle
旗下产品。
MySQL
是最流行的关系型数据库管理系统之一,在
WEB
应用方面,
MySQL
是最好的
RDBMS(RelationalDatabaseManagementSystem
,关系数据库管理系统
)
应用软件之一。在
Java
企业级
开发中非常常用,因为
MySQL是开源免费的,并且方便扩展。
4、数据库三大范式是什么
第一范式:每个列都不可以再拆分。
第二范式:在第一范式的基础上,非主键列完全依赖于主键,而不能是依赖于主键的一部分。
第三范式:在第二范式的基础上,非主键列只依赖于主键,不依赖于其他非主键。
在设计数据库结构的时候,要尽量遵守三范式,如果不遵守,必须有足够的理由。比如性能。事实上我
们经常会为了性能而妥协数据库的设计。
5、mysql有关权限的表都有哪几个
MySQL
服务器通过权限表来控制用户对数据库的访问,权限表存放在
mysql
数据库里,由
mysql_install_db
脚本初始化。这些权限表分别
user
,
db
,
table_priv
,
columns_priv
和
host
。下面分别介绍一下这些表的结构和内容:
user权限表
:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的。
db权限表
:记录各个帐号在各个数据库上的操作权限。
table_priv权限表
:记录数据表级的操作权限。
columns_priv权限表
:记录数据列级的操作权限。
host权限表
:配合
db
权限表对给定主机上数据库级操作权限作更细致的控制。这个权限表不受
GRANT
和REVOKE
语句的影响。
6、MySQL的binlog有几种录入格式?分别有什么区别?
有三种格式,
statement
,
row
和
mixed
。
statement模式下
,每一条会修改数据的
sql
都会记录在
binlog
中。不需要记录每一行的变化,减少
了
binlog
日志量,节约了
IO
,提高性能。由于
sql
的执行是有上下文的,因此在保存的时候需要保存
相关的信息,同时还有一些使用了函数之类的语句无法被记录复制。
row级别下
,不记录
sql
语句上下文相关信息,仅保存哪条记录被修改。记录单元为每一行的改动,
基本是可以全部记下来但是由于很多操作,会导致大量行的改动
(
比如
altertable)
,因此这种模式的
文件保存的信息太多,日志量太大。
mixed
,一种折中的方案,普通操作使用
statement
记录,当无法使用
statement
的时候使用
row
。
此外,新版的
MySQL
中对
row
级别也做了一些优化,当表结构发生变化的时候,会记录语句而不是逐行
记录。
模块二:数据类型
1、mysql有哪些数据类型
整数类型
,包括
TINYINT
、
SMALLINT
、
MEDIUMINT
、
INT
、
BIGINT
,分别表示
1
字节、
2
字节、
3
字
节、
4
字节、
8
字节整数。任何整数类型都可以加上
UNSIGNED
属性,表示数据是无符号的,即非负整
数。
实数类型
,包括
FLOAT
、
DOUBLE
、
DECIMAL
。
DECIMAL
可以用于存储比
BIGINT
还大的整型,能存储精确的小数。
字符串类型
,包括
VARCHAR
、
CHAR
、
TEXT
、
BLOBVARCHAR
用于存储可变长字符串,它比定长类型更节省空间。
使用策略
:
对于经常变更的数据来说,
CHAR
比
VARCHAR
更好,因为
CHAR
不容易产生碎片。
对于非常短的列,
CHAR
比
VARCHAR
在存储空间上更有效率。
使用时要注意只分配需要的空间,更长的列排序时会消耗更多内存。尽量避免使用
TEXT/BLOB
类型,查询时会使用临时表,导致严重的性能开销。
枚举类型(
ENUM
)
,把不重复的数据存储为一个预定义的集合。有时可以使用
ENUM
代替常用的字符串类型。
ENUM
存储非常紧凑,会把列表值压缩到一个或两个字节。
ENUM
在内部存储时,其实存的是
整数。尽量避免使用数字作为
ENUM
枚举的常量,因为容易混乱。排序是按照内部存储的整数
日期和时间类型
,尽量使用
timestamp
,空间效率高于
datetime
,用整数保存时间戳通常不方便处理。如果需要存储微妙,可以使用
bigint
存储。
模块三:引擎
1、MySQL存储引擎MyISAM与InnoDB区别
存储引擎
Storageengine
:
MySQL
中的数据、索引以及其他对象是如何存储的,是一套文件系统的实
现。
常用的存储引擎有以下:
Innodb引擎
:
Innodb
引擎提供了对数据库
ACID
事务的支持。并且还提供了行级锁和外键的约束。它设计的目标就是处理大数据容量的数据库系统。
MyIASM引擎(原本Mysql的默认引擎)
:
不提供事务的支持,也不支持行级锁和外键。
MEMORY引擎
:
所有的数据都在内存中,数据的处理速度快,但是安全性不高。
2、MyISAM
与
InnoDB
区别
3、MyISAM索引与InnoDB索引的区别?
InnoDB
索引是聚簇索引,
MyISAM
索引是非聚簇索引。
InnoDB
的主键索引的叶子节点存储着行数据,因此主键索引非常高效。
MyISAM
索引的叶子节点存储的是行数据地址,需要再寻址一次才能得到数据。
InnoDB
非主键索引的叶子节点存储的是主键和其他带索引的列数据,因此查询时做到覆盖索引会
非常高效。
4、InnoDB引擎的4大特性
插入缓冲(
insertbuffer)
二次写
(doublewrite)
自适应哈希索引
(ahi)
预读
(readahead)
5、存储引擎选择
如果没有特别的需求,使用默认的
Innodb
即可。
MyISAM
:以读写插入为主的应用程序,比如博客系统、新闻门户网站。
Innodb
:更新(删除)操作频率也高,或者要保证数据的完整性;并发量高,
支持事务和外键。比如
OA
自动化办公系统。