Mysql基础知识

  • 1. MySql是什么
  • 2. 数据库设计的三大范式
  • 2.1. 第一范式
  • 2.2. 第二范式
  • 2.3. 第三范式
  • 3. Binlog的三种模式
  • 3.1 Statement模式(默认)
  • 3.2 Row模式
  • 3.3 Mixed模式
  • 4. Mysql的数据类型
  • 5. Mysql的存储引擎
  • 6. Mysql的索引
  • 7. Mysql的事务
  • 8. Sql的优化

1. MySql是什么

  MySql是一个关系型数据库管理系统,由瑞典MySql AB公司开发,属于Oracle旗下产品。MySql是最流行的关系型数据库管理系统之一,在WEB应用方面,MySql是最好的RDBMS(Relational Database Management System)应用软件之一。在Java企业级开发中非常常用,因为MySql是开源免费的,并且方便扩展。

2. 数据库设计的三大范式

2.1. 第一范式

  每一列都不可再拆分。

  用户表:

id

name

phone

1

李四

123456

2

张三

17856756756

  用户表的设计就不符合第一范式,字段phone可拆分为手机号或者座机号。

2.2. 第二范式

  在第一范式的基础之上,非主键列完全依赖于主键列,而不能只依赖于主键列的一部分。

  订单信息表

订单编号

商品编号

商品名称

数量

单位

价格

客户

所属单位

座机号

001

1

挖掘机

1


1200000¥

张三

上海玖智

020-12345670

002

2

冲击钻

8


230¥

张三

上海玖智

020-1234567

  订单信息表设计就不符合第二范式,订单信息表的主键由订单编号及商品编号组成的联合主键,商品名称、数量、单位、价格只与商品编号有关,因此不符合第二范式。
  可以将订单信息表拆分为订单表和商品表,订单表中增加商品编号作为外键与商品表关联。

  商品表:

商品编号

商品名称

数量

单位

1

挖掘机

1


2

冲击钻

8


  订单表:

订单编号

客户

所属单位

座机号

商品编号

001

张三

上海玖智

020-12345670

1

002

张三

上海玖智

020-1234567

2

2.3. 第三范式

  在第二范式的基础之上,非主键只依赖于主键列,而不能依赖于其他非主键列。

  订单表

订单编号

订单项目

负责人

业务员

订单数量

客户编号

客户名称

客户座机号

001

挖掘机

刘明

020-12345670

1

1

李聪

021-1565448

002

张三

上海玖智

020-1234567

2

2

李新明

021-1565345

  定单表就不符合第三范式,客户名称、客户座机号不依赖于主键(订单编码)而是依赖于非主键(客户编号)。
  可以将订单表拆分为订单表与客户表,订单表中增加客户编号作为外键关联客户表。

  订单表

订单编号

订单项目

负责人

业务员

订单数量

客户编号

001

挖掘机

刘明

020-12345670

1

1

002

张三

上海玖智

020-1234567

2

2

  客户表

客户编号

客户名称

客户座机号

1

李聪

021-1565448

2

李新明

021-1565345

  在设计数据库时,要尽量遵守三范式,但是一般在设计时考虑到性能,及查询的方便,设计的表结构都不太符合三范式。

3. Binlog的三种模式

3.1 Statement模式(默认)

  每一条会修改数据的Sql语句都会被记录到binlog中。
  优点:
  
  缺点

3.2 Row模式

3.3 Mixed模式

4. Mysql的数据类型

5. Mysql的存储引擎

6. Mysql的索引

7. Mysql的事务

8. Sql的优化

  sql优化的主要思路就是查看sql是否使用了索引,避免全面扫描。可以使用explain关键字查看sql的执行过程。
  下面8条是sql优化思路:
  (1). 避免全表扫描,在where、order by、join on后面的字段增加索引。
  (2). 尽量避免使用!=或<>,可能会导致全表扫描。
  (3). 尽量避免使用in、not in,可能会导致全表扫描。
  (4). 尽量避免使用or,可能导致全表扫描。只有or的所有字段都加上了索引,才会使用索引。
  (5). 尽量避免使用is null,会导致全表扫描。
  (6). like (模糊查询)字段前不能加%,会导致全表扫描,比如 a like ‘%hyc’
  (7). where后面字段不能使用算术表达式或函数,“=”号的右边不能使用算术表达式或函数。
  (8). 不要使用count(*),会导致全表扫描。