1.数据库三范式是什么?
- 第一范式(1NF):字段具有原子性,不可再分。所有关系型数据库系统都满足第一范式,数据库表中的字
段都是单一属性的,不可再分。
- 第二范式(2NF)是在第一范式的基础上建立起来的,即满足第二范式必须先满足第一范式。要求数据库上
的每个实例或者每一行都可以被唯一地区分。通常需要为表加上一个列,以存储各个实例的唯一标识。这个
唯一属性列被称为主关键字或主键。
- 满足第三范式(3NF)必须先满足第二范式。简而言之,第三范式要求一个数据库表中不包含已在其他表
中已包含的非主关键字信息。所以第三范式具有以下特征 >> 1. 每一列只能由一个值 >> 2. 每一行都能区分
- 每一个表都不包含其他表已经包含的非主关键字信息
2. 有哪些数据库优化方面的经验?
<br />大家普遍误解PreparedStatment对象要比Statement对象效率高。毕竟, 一个prepared statement只要校
验一次,而一个普通statement每次都要校验 。既然如此,在什么情况下后者会比前者效率高呢? 事实是一
个prepared statement要执行65次以上才能赶上一个普通statement的执行效率。对于只执行一次的SQL语句
选择Statement是最好的。相反, 如果SQL语句被多次执行选用PreparedStatement是最好的。
PreparedStatement的第一次执行消耗是很高的。它的性能体现在后面的重复执行。
Update大量的数据时, 先Prepare一个INSERT语句再多次的执行, 会导致很多次的网络连接。要减少JDBC
的调用次数改善性能, 你可以使用PreparedStatement的AddBatch()方法一次性发送多个查询给数据库。
有外键约束会影响插入和删除性能,如果程序能够保证数据的完整性, 那在设计数据库时就去掉外键。
表中允许适当冗余,譬如,主题帖的回复数量和最后回复时间等
。
3. 请简述常用的索引有哪些种类?
普通索引: 即针对数据库表创建索引
唯一索引: 与普通索引类似,不同的就是:MySQL 数据库索引列的值 必须唯一,但允许有空值
主键索引: 它是一种特殊的唯一索引,不允许有空值。一般是在建表的 时候同时创建主键索引
组合索引: 为了进一步榨取 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 支持的复制类型?
**
**
- 基于语句的复制: 在主服务器上执行的 SQL 语句,在从服务器上执行
同样的语句。MySQL 默认采用基于语句的复制,效率比较高。 一旦发
现没法精确复制时,会自动选着基于行的复制。
- 基于行的复制:把改变的内容复制过去,而不是把命令在从服务器上执
行一遍. 从 mysql5.0 开始支持
- 混合类型的复制: 默认采用基于语句的复制,一旦发现基于语句的无法
精确的复制时,就会采用基于行的复制。
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 代表的涵
义
varchar 与 char 的区别: char 是一种固定长度的类型,varchar 则是一种可变长度的类型
varchar(50)中 50 的涵义 : 最多存放 50 个字节
int(20)中 20 的涵义: int(M)中的 M indicates the maximumdisplay width (最大显示宽度)for integer types. The maximumlegal display width is 255