mysql数据库面试题
1. 数据库应用系统设计
- 规划
- 需求分析
- 概念模型设计
- 逻辑设计
- 物理设计
- 程序编制和调试
- 运行和维护
2.MySQL相比于其他数据库有哪些特点?
- 可以处理大型数据
- 可移植性高,安装简单
- 开源,免费,使用的人多
- 调试,优化相对简单
3.如何解决MySQL数据库中文乱码问题?
- 在数据库安装的时候指定字符集
- 也可以更改配置文件
mysql目录my.ini
在[mysqld]后面追加
character_set_server=utf8
- 建立数据库时选择字符集
- 建表时指定字符集
4.如何提高MySQL的安全性?
- 使用ssh隧道来加密该连接的通信
- 不要使用明文密码,而是使用md5()和sha1()等单向的哈系函数来设置密码
- 让数据库系统躲在防火墙后面工作
- 设置除了root用户外的其他任何用户不允许访问MySQL主数据库中的user表;
5.MySQL取得当前时间的函数是?格式化日期的函数是?
取得当前时间用 now() 就行。在数据库中格式化时间用DATE_FORMAT(date, format)。
根据格式串 format 格式化日期或日期时间值date,返回结果串。
6.MySQL数据库设计数据类型选择需要注意哪些地方?
- VARCHAR和CHAR类型,varchar是变长的,需要额外的1-2个字节存储,能节约空间,可能会对性能有帮助。但由于是变长,可能发生碎片,如更新数据;
- 使用ENUM(MySQL的枚举类)代替字符串类型,数据实际存储为整型。
- 要尽可能地避免使用字符串来做标识符,因为它们占用了很多空间并且通常比整数类型要慢。
7.MySQL几种备份方式?(重点)
- 逻辑备份:使用MySQL自带的MySQLdump工具进行备份。备份成sql文件形式。
优点:最大好处是能够与正在运行的MySQL自动协同工作,在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问)。可能会阻止修改操作。sql文件通用方便移植。
缺点:备份的速度比较慢。如果是数据量很多的时候。就很耗时间。如果数据库服务器处在提供给用户服务状态,在这段长时间操作过程中,意味着要锁定表(一般是读锁定,只能读不能写入数据)。那么服务就会影响的。 - 物理备份:直接拷贝MySQL的数据目录。
直接拷贝只适用于myisam类型的表。这种类型的表是与机器独立的。但实际情况是,你设计数据库的时候不可能全部使用myisam类型表。你也不可能因为myisam类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。
缺点:你不能去操作正在运行的MySQL服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)可能无法移植到其他机器上去。 - 双机热备份。
MySQL数据库没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好MySQL数据库提供了一种主从备份的机制(也就是双机热备)
优点:适合数据量大的时候。现在明白了。大的互联网公司对于MySQL数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。
8、MySQL支持事务吗?
- 在缺省模式下,MySQL是autocommit模式的,所有的数据库更新操作都会即时提交,所以在缺省情况下,MySQL是不支持事务的。
- 但是如果你的MySQL表类型是使用InnoDB Tables 或 BDB tables的话,你的MYSQL就可以使用事务处理,使用SET AUTOCOMMIT=0就可以使MYSQL允许非autocommit模式, 在非autocommit模式下,你必须使用COMMIT来提交你的更改,或者用ROLLBACK来回滚你的更改。
9、什么是聚集索引?
理解:
举个例子:
比如图书馆新进了一批书。那么这些书需要放到图书馆内。书如何放呢?一般都有一个规则,
杂志类的放到101房间,文学类的放到102房间,理工类的放到103房间等等
。这些存储的规则决定了每本书应该放到哪里。而这个例子中聚集索引为书的类别。
正式因为这种存储规则,才导致 聚集索引的唯一性。
同学如果想去图书馆找一本书,而不知道这本书在哪里?那么这个同学首先应该找的就是
检索室吧。对于要查找一本书来说,在检索室查是一个非常快捷的的途径了吧。但是,在检索室中你查到了该书在XX室XX书架的信息。你的查询结束了吗?没有吧。你仅仅找到了目的书的位置信息,你还要去该位置去取书。对于这种方式来说,你需要两个步骤:(非聚集索引)
1、查询该记录所在的位置。
2、通过该位置去取要找的记录。
- 聚集索引是指数据库表行中数据的物理顺序与键值的逻辑(索引)顺序相同。
- 一个表只能有一个聚集索引,因为一个表的物理顺序只有一种情况,所以,对应的聚集索引只能有一个。
- 聚集和非聚集区别是在 B+Tree的叶结点存储数据还是指针 ,
MyISAM 默认使用索引是非聚集的,
InnoDB 主键索引是聚集索引
优点:数据访问快。聚集索引把索引和数据都保存到了同一棵B-TREE中
缺点:插入速度严重依赖于插入顺序。更新聚集索引列是昂贵的,因为强制InnoDB把每个更新的行移到新的位置。
10、MySQL主从用什么方式传输日志?
- MySQL 复制基于主服务器在二进制日志中跟踪所有对数据库的更改(更新、删除等等)。
- 每个从服务器从主服务器接收主服务器已经记录到其二进制日志的保存的更新,以便从服务器可以对其数据拷贝执行相同的更新。
- 总结来说就是主服务器全程监控数据库,一旦发生改变通过对日志的更新,从服务器也立刻改变。
11、简单叙述一下MySQL的优化?(重点)
1.数据库的设计:尽量把数据库设计的更小的占磁盘空间.
- 尽可能使用更小的整数类型.(mediumint就比int更合适).
- 尽可能的定义字段为not null,除非这个字段需要null.
- 如果没有用到变长字段的话比如varchar,那就采用固定大小的纪录格式比如char.
- 表的主索引应该尽可能的短.这样的话每条纪录都有名字标志且更高效.
- 只创建确实需要的索引。索引有利于检索记录,但是不利于快速保存记录。如果总是要在表的组合字段上做搜索,那么就在这些字段上创建索引。索引的第一部分必须是最常使用的字段.如果总是需要用到很多字段,首先就应该多复制这些字段,使索引更好的压缩。
- 所有数据都得在保存到数据库前进行处理。
- 所有字段都得有默认值。
- 在某些情况下,把一个频繁扫描的表分成两个速度会快好多。在对动态格式表扫描以取得相关记录时,它可能使用更小的静态格式表的情况下更是如此。
2.系统的用途
- 尽量使用长连接.
- explain复杂的SQL语句。
- 如果两个关联表要做比较话,做比较的字段必须类型和长度都一致.
- LIMIT语句尽量要跟order by或者 distinct.这样可以避免做一次full table scan.
- 如果想要清空表的所有纪录,建议用truncate table tablename而不是delete from tablename.
- 能使用STORE PROCEDURE 或者 USER FUNCTION的时候.
- 在一条insert语句中采用多重纪录插入格式.而且使用load data infile来导入大量数据,这比单纯的insert快好多.
- 经常OPTIMIZE TABLE 来整理碎片.
- 还有就是date 类型的数据如果频繁要做比较的话尽量保存在unsigned int 类型比较快。
3.系统的瓶颈
- 磁盘搜索。并行搜索,把数据分开存放到多个磁盘中,这样能加快搜索时间.
- 磁盘读写(IO)。可以从多个媒介中并行的读取数据。
- CPU周期。数据存放在主内存中.这样就得增加CPU的个数来处理这些数据。
- 内存带宽。当CPU要将更多的数据存放到CPU的缓存中来的话,内存的带宽就成了瓶颈.
12、数据库有几种数据保护方式?
实现数据库安全性控制的常用方法和技术有:
用户标识和鉴别;存取控制;视图机制;审计;数据加密;