1,连接数据库

  • 如果通过mysql -uroot -p pwd连接失败显示not found mysql
  • alias mysql=/usr/local/mysql/bin/mysql中断输入此命令
  • 即可解决在使用mysql -uroot -p pwd连接成功

2,mysql数据类型

  • 数字类型
  • 整数:int、tinyint、smallint、bigint
  • 浮点数:float、double、real、decimal
  • 字符串类型
  • 字符串:char、varchar
  • 文本:text、tinytext、longtext
  • 二进制:tinyblob、blob、mediumblob、longblob

3,数据库三范式

  • 1NF:字段不可拆分
  • 解释:表的列具有原子性,不可再分解,即列的信息不可再分解,只要是关系型数据库就自动满足第一范式
  • 2NF:有主键,非主键字段依赖主键(消除依赖)
  • 解释:唯一性,在满足第一范式的前提下,非主键字段只能依赖表中同一个字段
  • 3NF:非主键字段不能相互依赖(传递依赖)
  • 在满足第二范式的前提下,某一个属性依赖其他非主键属性,而其他非主键属性又依赖于主键属性,即使传递属性

4,MySQL数据库事务的四大特性

  • 原子性:一个事务中所有操作,要么全部执行,要么全部不执行,不会结束在中间某个时刻,事务在执行过程中发生错误,事务会被回滚到事务开始前的状态,就像这个事务没有开始一样
  • 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏。这表示写入的资料必须完全符合所有的预设规则,这包含资料的精确度、串联性以及后续数据库可以自发性地完成预定的工作。
  • 隔离性:数据库允许多个并发事务对数据执行操作,隔离性就可以防止多个并发事务执行时由于交叉执行而导致数据不一致。事务的隔离级别有未提交、读提交、可重复读和串行化、
  • 持久性:事务的处理结束后,对数据的修改都是永久性的,不会因为系统故障而丢失数据。

5,MySQL优化-从以下几个方面:

  • 数据库设计
  • 数据库表
  • 单表字段不宜过多,二三十个就是极限了
  • 满足数据库表的三范式
  • 垂直分割:把数据库表变成按列分割的几张表,降低表的复杂度和字段数目,达到优化的目的
  • 字段设计
  • 尽量使用整型表示字符串(比如说性别,用1代表男,0代表女)
  • 枚举类型,因为维护成本比较高,使用关联表代替enum
  • 尽可能使用not null
  • 字段尽可能小
  • 尽量使用varchar代替char
  • 存储引擎
  • 存储引擎的选择依据
  1. 如果没有特别的要求使用默认的innodb即可
  2. MyISAM:一读写插入为主的应用程序,如博客系统,新闻门户网站
  3. InnoDB:更新删除的操作频率高;或者需要保证数据的完整性;并发量高,支持事务或外键保证数据完整性,如OA自动办公化系统
  • 存储差异
    内容 | MyISAM | Innodb
    —|---|—
    文件格式 |数据和索引分别存储,数据.MYD,索引.MYI| 数据索引集中存储, .ibd
    事务 |不支持 | 支持
    外键 |不支持 | 支持
    锁 |表级锁 | 行锁,表锁,锁定力度,并发量高
  • SQL语句(收效甚微)
  • 建立合适索引
  • 避免使用select *
  • 避免使用order by rand()
  • 不能使用索引的情况:对于普通索引时,使用like进行模糊查询时不要使用通配符%
  • 查询时尽量避免全表扫描,首先应考虑在where和order by设计的列建立索引
  • 尽量避免在where子句上对null字段判断

  • 尽量使用exist代替in
  • 主从复制和读写分离
    生产环境中大多操作都是读,所以可以部署一主多从架构,主负责写,从负责读。