MySql基础知识【一】

1. MySql是什么

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

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

2.1. 第一范式

  每一列都不可再拆分。

  用户表:

idnamephone
1李四123456
2张三17856756756

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

2.2. 第二范式

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

  订单信息表

订单编号商品编号商品名称数量单位价格客户所属单位座机号
0011挖掘机11200000¥张三上海玖智020-12345670
0022冲击钻8230¥张三上海玖智020-1234567

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

  商品表:

商品编号商品名称数量单位
1挖掘机1
2冲击钻8

  订单表:

订单编号客户所属单位座机号商品编号
001张三上海玖智020-123456701
002张三上海玖智020-12345672

2.3. 第三范式

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

  订单表

订单编号订单项目负责人业务员订单数量客户编号客户名称客户座机号
001挖掘机刘明020-1234567011李聪021-1565448
002张三上海玖智020-123456722李新明021-1565345

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

  订单表

订单编号订单项目负责人业务员订单数量客户编号
001挖掘机刘明020-1234567011
002张三上海玖智020-123456722

  客户表

客户编号客户名称客户座机号
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(*),会导致全表扫描。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值