1.数据库三范式是什么?

  1. 第一范式(1NF):字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式,数据库表中的字

段都是单一属性的,不可再分。

  1. 第二范式(2NF)是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式。要求数据库上

的每个实例或者每一行都可以被唯一地区分。通常需要为表加上一个列,以存储各个实例的唯一标识。这个

唯一属性列被称为主关键字或主键。

  1. 满足第三范式(3NF)必须先满足第二范式。简而言之,第三范式要求一个数据库表中不包含已在其他表

中已包含的非主关键字信息。所以第三范式具有以下特征 >> 1. 每一列只能由一个值 >> 2. 每一行都能区分

  1. 每一个表都不包含其他表已经包含的非主关键字信息

2. 有哪些数据库优化方面的经验?

  1. <br />大家普遍误解PreparedStatment对象要比Statement对象效率高。毕竟, 一个prepared statement只要校

验一次,而一个普通statement每次都要校验 。既然如此,在什么情况下后者会比前者效率高呢? 事实是一

个prepared statement要执行65次以上才能赶上一个普通statement的执行效率。对于只执行一次的SQL语句

选择Statement是最好的。相反, 如果SQL语句被多次执行选用PreparedStatement是最好的。

PreparedStatement的第一次执行消耗是很高的。它的性能体现在后面的重复执行。

Update大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接。要减少JDBC

的调用次数改善性能, 你可以使用PreparedStatement的AddBatch()方法一次性发送多个查询给数据库。

有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性, 那在设计数据库时就去掉外键。

表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等

3. 请简述常用的索引有哪些种类?

  1. 普通索引: 即针对数据库表创建索引

  2. 唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值 必须唯一,但允许有空值

  3. 主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的 时候同时创建主键索引

  4. 组合索引: 为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。 即将数据库表中的多个字段联合起来作

为一个组合索引。

4. 在 mysql 数据库中索引的工作机制是什么?

<br />数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更

新数据库表中数据。索引的实

现通常使用 B 树及其变种 B+树

5. .MySQL 的基础操作命令:

  • Shell 登入 MySQL: 运行命令 mysql -u root -p

  • 列出所有数据库:运行命令 show databases;

  • 切换到某个数据库并在上面工作:运行命令 use databasename; 进入 名为 databasename 的数据库

  • 列出某个数据库内所有表: show tables;

  • 获取表内所有 Field 对象的名称和类型 :describe(desc) table_name;

6. mysql 的复制原理以及流程

Mysql 内建的复制功能是构建大型,高性能应用程序的基础。将 Mysql 的数据

分布到多个系统上去,这种分布的机制,是通过将 Mysql 的某一台主机的数据

复制到其它主机(slaves)上,并重新执行一遍来实现的。 * 复制过程中一

个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将

更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志

可以记录发送到从服务器的更新。 当一个从服务器连接主服务器时,它通知主

服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生

的任何更新,然后封锁并等待主服务器通知新的更新。 过程如下 1. 主服务器

把更新记录到二进制日志文件中。 2. 从服务器把主服务器的二进制日志拷贝

到自己的中继日志(replay log)中。 3. 从服务器重做中继日志中的时间,

把更新应用到自己的数据库上。

7. mysql 支持的复制类型?

**

**

  1. 基于语句的复制: 在主服务器上执行的 SQL 语句,在从服务器上执行

同样的语句。MySQL 默认采用基于语句的复制,效率比较高。 一旦发

现没法精确复制时,会自动选着基于行的复制。

  1. 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执

行一遍. 从 mysql5.0 开始支持

  1. 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法

精确的复制时,就会采用基于行的复制。

8. mysql 中 myisam 与 innodb 的区别?

  • 事务支持

    • MyISAM:强调的是性能,每次查询具有原子性,其执行速 度比 InnoDB 类型更快,但是不提供事务支持。

    • InnoDB:提供事 务支持,外部键等高级数据库功能。 具有事务(commit)、回滚 (rollback)和崩溃修复能力(crash recovery capabilities)的事务安全 (transaction-safe (ACID compliant))型表。

  • InnoDB 支持行级锁,而 MyISAM 支持表级锁. >> 用户在操作 myisam 表时,select,update,delete,insert 语句都会给表自动 加锁,如果加锁以后的表满足 insert 并发的情况下,可以在表的尾部插 入新的数据。

  • InnoDB 支持 MVCC, 而 MyISAM 不支持

  • 表主键

    • MyISAM:允许没有任何索引和主键的表存在,索引都是保 存行的地址。

    • InnoDB:如果没有设定主键或者非空唯一索引,就会 自动生成一个 6 字节的主键(用户不可见),数据是主索引的一部分,附 加索引保存的是主索引的值。

  • InnoDB 不支持全文索引,而 MyISAM 支持。

  • 可移植性、备份及恢复

    • MyISAM:数据是以文件的形式存储,所以 在跨平台的数据转移中会很方便。在备份和恢复时可单独针对某个表进 行操作。

    • InnoDB:免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump,在数据量达到几十 G 的时候就相对痛 苦了。

  • 存储结构

    • MyISAM:每个 MyISAM 在磁盘上存储成三个文件。第一 个文件的名字以表的名字开始,扩展名指出文件类型。.frm 文件存储表 定义。数据文件的扩展名为.MYD (MYData)。索引文件的扩展名 是.MYI (MYIndex)。

    • InnoDB:所有的表都保存在同一个数据文件 中(也可能是多个文件,或者是独立的表空间文件),InnoDB 表的大 小只受限于操作系统文件的大小,一般为 2GB。

9. mysql 中 varchar 与 char 的区别以及 varchar(50)中的 50 代表的涵

  1. varchar 与 char 的区别: char 是一种固定长度的类型,varchar 则是一种可变长度的类型

  2. varchar(50)中 50 的涵义 : 最多存放 50 个字节

  3. int(20)中 20 的涵义: int(M)中的 M indicates the maximumdisplay width (最大显示宽度)for integer types. The maximumlegal display width is 255

10.