前言:

  随着年龄的增长生活琐碎的事情、烦心的事情日渐增多,怠慢了更新,
1.什么是数据库
DB.DataBase 数据库:
依照某种数据模型进行组织并存放到存储器的数据集合
DBMS.DataBase Management System – 数据库管理系统:
用来操纵和管理数据库的大型服务 软件
DBS.DataBase System – 数据库系统:
即 DB+DBMS ,指带有数据库并整合了数据库管理软件的计算机系统。

2.主流数据库服务软件有哪些?开源且跨平台的数据库软件有哪些?
主流数据库服务软件有:
甲骨文公司 Oracle
IBM DB2
微软 SQL Server
美国 Sybase 公司 Sybase
加州大学伯克利分校计算机系开发的 PostgreSQL
开源且跨平台的数据库软件有:
MySQL、PostgreSQL:开源且跨平台
Oracle、DB2:跨平台不开源
SQL Server:不跨平台不开源
Sybase:跨平台不开源

3.MySQL 的特点及应用
主要特点
– 适用于中小规模、关系型数据库系统
– 支持 Linux/Unix 、 Windows 等多种操作系统
– 使用 C 和 C++ 编写,可移植性强
– 通过 API 支持 Python/Java/Perl/PHP 等语言
典型应用环境
– LAMP 平台,与 Apache HTTP Server 组合
– LNMP 平台,与 Nginx 组合

4.mysql 服务相关参数有什么?
文件 说明
/etc/my.cnf 主配置文件
/var/lib/mysql 数据库目录
默认端口号 3306
进程名 mysqld
传输协议 TCP
进程所有者 mysql
进程所属组 mysql

5.mysql 操作指令和注意事项?
操作指令类型
– MySQL 指令:环境切换、看状态、退出等控制
– SQL 指令:数据库定义 / 查询 / 操纵 / 授权语句
基本注意事项
– 操作指令不区分大小写(密码、变量值除外)
– 每条 SQL 指令以 ; 结束或分隔
– 不支持 Tab 键自动补齐
– \c 可废弃当前编写错的操作指令

6.库管理命令都有什么?
– Show databases; // 显示已有的库
– Use 库名 ; // 切换库
– Select database(); // 显示当前所在的库
– Create database 库名 ; // 创建新库
– Show tables; // 显示已有的表
– Drop database 库名; // 删除库

7.常见的信息种类
• 数值型:体重、身高、成绩、工资
• 字符型:姓名、工作单位、通信住址
• 枚举型:兴趣爱好、性别
• 日期时间型:出生日期、注册时间

8.(数值型)关于整数型字段
– 使用 UNSIGNED 修饰时,对应的字段只保存正数
– 数值不够指定宽度时,在左边填空格补位
– 宽度仅是显示宽度,存数值的大小由类型决定
– 使用关键字 ZEROFILL 时,填 0 代替空格补位
– 数值超出范围时,报错。

9.(数值型)关于浮点型字段
– 定义格式: float( 总宽度 , 小数位数 )
– 当字段值与类型不匹配时,字段值作为 0 处理
– 数值超出范围时,仅保存最大 / 最小值

10.字符类型
• 定长: char( 字符数 )
– 最大长度 255 字符
– 不够指定字符数时在右边用空格补齐
– 字符数断超出时,无法写入数据。
• 变长: varchar( 字符数 )
– 按数据实际大小分配存储空间
– 字符数断超出时,无法写入数据。
• 大文本类型: text/blob
– 字符数大于 65535 存储时使用

11.日期时间类型
• 日期时间, DATETIME
– 占用 8 个字节
– 范围: 1000-01-01 00:00:00.000000 ~ 9999-12-31 23:59:59.999999
• 日期时间, TIMESTAMP
– 占用 4 个字节
– 范围: 1970-01-01 00:00:00.000000 ~ 2038-01-19 03:14:07.999999
• 日期, DATE
– 占用 4 个字节
– 范围: 0001-01-01 ~ 9999-12-31
• 年份, YEAR
– 占用 1 个字节
– 范围: 1901~2155
• 时间, TIME
– 占用 3 个字节
– 格式: HH:MM:SS

12.时间函数
类型 用途
now() 获取系统当前日期和时间
year() 执行时动态获得系统日期时间
sleep(N) 休眠 N 秒
curdate() 获取当前的系统日期
curtime() 获取当前的系统时刻
month() 获取指定时间中的月份
date() 获取指定时间中的日期
time() 获取指定时间中的时刻

13.枚举类型
• 从给定值集合中选择单个值, ENUM
– 定义格式: enum( 值 1, 值 2, 值 N)
• 从给定值集合中选择一个或多个值, SET
– 定义格式: set( 值 1, 值 2, 值 N)

14. 约束条件
• Null 允许为空,默认设置
• NOT NULL 不允许为空 • Key 索引类型
• Default 设置默认值,缺省为 NULL

15. 修改表结构的基本用法
– ALTER TABLE 表名 执行动作 ;
Add 添加字段
Modify 修改字段类型
Change 修改字段名
Drop 删除字段
Rename 修改表名

16.索引是什么?
– 索引是对记录集的多个字段进行排序的方法。
– 类似于书的目录
– 索引类型包括 :Btree 、 B+tree 、 hash

17.索引优缺点?
• 索引优点
– 通过创建唯一性索引,可以保证数据库表中每一行数 据的唯一性
– 可以加快数据的检索速度
• 索引缺点
– 当对表中的数据进行增加、删除和修改的时候,索引 也要动态的维护,降低了数据的维护
速度
– 索引需要占物理空间

18.键值类型有几种,分别是什么?
• INDEX :普通索引
• UNIQUE :唯一索引
• FULLTEXT :全文索引
• PRIMARY KEY :主键
• FOREIGN KEY :外键

19.INDEX 普通索引说明?
– 一个表中可以有多个 INDEX 字段
– 字段的值允许有重复,切可以赋 NULL 值
– 经常把做查询条件的字段设置为 INDEX 字段
– INDEX 字段的 KEY 标志是 MUL

20.primary key 主键注意事项
– 一个表中只能有一个 primary key 字段
– 对应的字段值不允许有重复,且不允许赋 NULL 值
– 如果有多个字段都作为 PRIMARY KEY ,称为复合主 键,必须一起创建。
– 主键字段的 KEY 标志是 PRI
– 通常与 AUTO_INCREMENT 连用
– 经常把表中能够唯一标识记录的字段设置为主键字段

21.foreign key 外键 什么是外键?
– 让当前表字段的值在另一个表中字段值的范围内选择 。
• 使用外键的条件
– 表的存储引擎必须是 innodb
– 字段类型要一致
– 被参照字段必须要是索引类型的一种 (primary key)

22.简述 MySQL 体系结构的组成,并描述每个组成部分的作用。
主要包括 8 个部分:
连接池:进程数限制、内存检查、缓存检查等。
SQL 接口:用户通过 sql 客户端发过来的命令,由 sql 接口接收,sql 操作(DML 数据操作语
言:查询、修改、升级数据等;DDL 数据定义语言:创建一个新的数据库、新的索引、删除一
个用户等;存储过程、视图触发器。
分析器: 分析查询语句 事务处理 对象访问权限。
优化器: 优化访问路径 、 生成执行树。
缓存和缓冲:保存 sql 查询结果。
存储引擎:用于管理存储的文件系统,将逻辑结构转换为物理结构的程序;不同的存储引擎有
不同的功能和存储方式。
管理工具:备份,恢复,安全,移植,集群等,这些工具一般和文件系统打交道,不需要和
mysql-server 打交道,它们对应的都是命令。
物理存储设备(文件系统)。

23.MySQL 存储引擎
• 作为可插拔式的组件提供
– MySQL 服务软件自带的功能程序,处理表的处理器
– 不同的存储引擎有不同的功能和数据存储方式
• 默认的存储引擎
– MySQL 5.0/5.1 —> MyISAM
– MySQL 5.5/5.6 —> InnoDB

24.Myisam 存储引擎的主要特点
– 支持表级锁
– 不支持事务、事务回滚、外键
• 相关的表文件
– 表名 .frm 、 – 表名 .MYI – 表名 .MYD

25.InnoDB 存储引擎主要特点
– 支持行级锁定
– 支持事务、事务回滚、支持外键
• 相关的表文件
– xxx.frm 、 xxx.ibd
– ibdata1
– ib_logfile0 – ib_logfile1

26.MySQL 锁机制
• 锁粒度
– 表级锁:一次直接对整张表进行加锁。
– 行级锁:只锁定某一行。
– 页级锁:对整个页面( MySQL 管理数据的基本存储单 位)进行加锁。
• 锁类型
– 读锁(共享锁):支持并发读。
– 写锁(互斥锁、排它锁):是独占锁,上锁期间其他 线程不能读表或写表。

27.数据库事务的事务特性 (ACID)
• Atomic :原子性
– 事务的整个操作是一个整体,不可分割,要么全部成 功,要么全部失败。
• Consistency : 一致性
– 事务操作的前后,表中的记录没有变化。
• Isolation :隔离性
– 事务操作是相互隔离不受影响的。
• Durability :持久性
– 数据一旦提交,不可改变,永久改变表数据

28.数据导入基本用法和注意事项
• 基本用法
– LOAD DATA INFILE “ 目录名 / 文件名” INTO TABLE 表名 FIELDS TERMINATED BY “ 分
隔符” LINES TERMINATED BY “\n”;
• 注意事项
– 字段分隔符要与文件内的一致
– 指定导入文件的绝对路径
– 导入数据的表字段类型要与文件字段匹配
– 禁用 SElinux

29.数据导出基本用法和注意事项
– SELECT 查询 … … INTO OUTFILE “ 目录名 / 文件名” FIELDS TERMINATED BY “ 分隔
符” LINES TERMINATED BY “\n”;
•注意事项
– 导出的内容由 SQL 查询语句决定
– 禁用 SElinux

30.增加表记录的格式
格式 1 :
给所有字段赋值
– INSERT INTO 表名 VALUES
( 字段 1 值, … … ,字段 N 值 ) ,
( 字段 1 值, … … ,字段 N 值 ) ,
( 字段 1 值, … … ,字段 N 值 ) , … … ;
格式 2
给指定字段赋值
– INSERT INTO 表名 ( 字段 1,… …, 字段 N) VALUES
( 字段 1 值,字段 2 值,字段 N 值 ) ,
( 字段 1 值,字段 2 值,字段 N 值 ) ,
( 字段 1 值,字段 2 值,字段 N 值 ) ,
… … ;
注意事项
字段值要与字段类型相匹配
对于字符类型的字段,要用双或单引号括起来
依次给所有字段赋值时,字段名可以省略
只给一部分字段赋值时,必须明确写出对应的字段名称

31.查询表记录
语法格式
• 格式 1
ELECT 字段 1, … …, 字段 N FROM 表名 ;
• 格式 2
SELECT 字段 1, … …, 字段 N FROM 表名 WHERE 条件表达式 ;
• 注意事项
使用 * 可匹配所有字段
指定表名时,可采用 库名 . 表名 的形式

32.更新表记录
语法格式
• 格式 1 ,
更新表内的所有记录
– UPDATE 表名
SET 字段 1= 字段 1 值 , 字段 2= 字段 2 值 , 字段 N= 字段 N 值 ;
格式 2 ,
只更新符合条件的部分记录
– UPDATE 表名 SET 字段 1= 字段 1 值 , 字段 2= 字段 2 值 , 字段 N= 字段 N 值 ;
WHERE 条件表达式 ;

33. 注意事项
字段值要与字段类型相匹配
对于字符类型的字段,要用双或单引号括起来
若不使用 WHERE 限定条件,会更新所有记录
限定条件时,只更新匹配条件的记录

34.删除表记录
• 格式 1 ,
仅删除符合条件的记录
– DELETE FROM 表名 WHERE 条件表达式 ;
• 格式 2, 删除所有的表记录
– DELETE FROM 表名 ;

35.基本查询条件
数值比较
= 等于 > 、 >= 大于、大于或等于 < 、 <= 小于、小于或等于 != 不等于
字符比较
= 相等
!= 不相等
IS NULL 匹配空
IS NOT NULL 非空
逻辑比较
• 多个判断条件时使用
OR 逻辑或
AND 逻辑与
! 逻辑非
( ) 提高优先级
范围内匹配 / 去重显示
• 匹配范围内的任意一个值即可
In ( 值列表 ) 在…里…
Not in ( 值列表 ) 不在…里…
Between 数字 1 and 数字 2 在…之间…
DISTINCT 字段名 去重显示

36.聚集函数都有哪些?
• MySQL 内置数据统计函数
– avg( 字段名 ) : 求平均值
– sum( 字段名 ) :求和
– min( 字段名 ) : 统计最小值
– max( 字段名 ) :统计最大值
– count( 字段名 ) :统计个数

37.常见的 MySQL 管理工具有哪些?
mysql 命令行 跨平台 MySQL 官方 bundle 包自 带
MySQL-Workbench 图形 跨平台 MySQL 官方提供
MySQL-Front 图形 Windows 开源,轻量级客户端软件
phpMyAdmin 浏览器 跨平台 开源,需 LAMP 平台
Navicat 图形 Windows 专业、功能强大,商业版

38.安装 PhpMyAdmin 基本思路是什么?

  1. 安装 httpd 、 mysql 、 php-mysql 及相关包
  2. 启动 httpd 服务程序
  3. 解压 phpMyAdmin 包,部署到网站目录
  4. 配置 config.inc.php ,指定 MySQL 主机地址
  5. 创建授权用户
  6. 浏览器访问、登录使用

39.密码忘了怎么办?
7. 停止 MySQL 服务程序
8. 跳过授权表启动 MySQL 服务程序 skip-grant-tables
9. 重设 root 密码(更新 user 表记录)
10. 以正常方式重启 MySQL 服务程序

40.简述 MySQL 数据库访问的执行过程。
客户端发出请求。
2)服务器端开辟线程响应客户端请求。
3)客户端发起 sql 语句查询数据库。
4)查询缓存:记录用户的 sql 查询语句,如果查询内容相同,直接从查询缓存回复。
5)如果缓存没有进入分析器。
6)分析器:分析用户命令语法是否正确,将用户的命令进行切片,一个词一个词用空格隔开,
获得用户要查询的表、内容、用户的权限等。
7)优化器:执行路径的选择,生成执行树。(每个 SQL 语句都有很多执行路径,优化的目的就
是在这些执行路径里选择最优的执行路径)。
8)存储引擎:用于管理存储的文件系统,不同的存储引擎有不同的功能和存储方式。

41.GRANT 配置授权用法和注意事项?
• 基本用法
– GRANT 权限列表 … … ON 库名 . 表名
– TO 用户名 @’ 客户端地址 ’
– IDENTIFIED BY ’ 密码 ’
– [ WITH GRANT OPTION ];
• 注意事项
– 当库名 . 表名 为 . 时,匹配所有库所有表 – 授权设置存放在 mysql 库的 user 表

42.mysql 授权的权限列表分类?
– all :匹配所有权限
– SELECT,UPDATE,INSERT … …
– SELECT,UPDATE ( 字段 1, … … , 字段 N)

43.mysql 授权的客户端地址方法?
– % :匹配所有主机
– 192.168.1.% :匹配指定的一个网段
– 192.168.1.1 :匹配指定 IP 地址的单个主机
– %.tarena.com :匹配一个 DNS 区域
– svr1.tarena.com :匹配指定域名的单个主机
撤销用户权限的格式用法?
• 基本用法 – REVOKE 权限列表 ON 库名 . 表名 – FROM 用户名 @’ 客户端地址 ‘;

44.简述 MySQL 数据库中插入、更新、查询、删除表记录的指令格式。
连接到 MySQL 数据库服务器,练习以下表记录操作:
向表中插入记录的语法格式
更新表记录的语法格式
查询表记录的语法格式
删除表记录的语法格式
参考答案
1)向表中插入记录的语法格式
insert (into)表名(字段名列表) values(字段名=值,字段名=值,…);
2)更新表记录的语法格式
update 表名(set) (字段名=值,字段名=值,…) where(条件表达式列表);
3)查询表记录的语法格式
select (字段名列表) (from) 表名 (where) 条件表达式列表;
4)删除表记录的语法格式
delete (from) 表名 (where) ( 条件表达式列表);

45.数据备份策略有那几种?
• 完全备份 – 备份所有数据(一台服务器、一个库、一张表)
• 增量备份 – 备份自上一次备份(包含完全备份、差异备份、增量 备份)之后有变化的数据
• 差异备份 – 备份自上一次完全备份之后有变化的数据

46.逻辑备份及恢复
• 备份操作 – mysqldump 源库名 > 路径 /xxx.sql
• 恢复操作 – mysql 目标库名 < 路径 /xxx.sql

47.利用 binlog 恢复数据的基本思路?
– 使用 mysqlbinlog 提取历史 SQL 操作
– 通过管道交给 mysql 命令执行

48.常用的 MySQL 备份工具 的缺点?
• 物理备份缺点
– 跨平台性差
– 备份时间长、冗余备份、浪费存储空间 •
mysqldump 备份缺点
– 效率较低,备份和还原速度慢
– 备份过程中,数据插入和更新操作会被挂起

49.介绍一下 XtraBackup 工具是什么?
• 一款强大的在线热备份工具
– 备份过程中不锁库表,适合生产环境
– 由专业组织 Percona 提供(改进 MySQL 分 支)
• 主要含两个组件
– xtrabackup : C 程序,支持 InnoDB/XtraDB
– innobackupex :以 Perl 脚本封装 xtrabacku p ,还支持 MyISAM

50 什么是读写分离?
MySQL Proxy 最强大的一项功能是实现“读写分离(Read/Write Splitting)”。基本的原理是
让主数据库处理事务性查询,而从数据库处理 SELECT 查询。数据库复制被用来把事务性查询导
致的变更同步到集群中的从数据库。 当然,主服务器也可以提供查询服务。使用读写分离最大
的作用无非是环境服务器压力。