MySQL数据库常记知识

事务模块:
MySQL的事务四个特性ACID:

原子性: 要么完成, 要么失败;
一致性: 如果有数据崩溃,数据能够回到原来的样子;
隔离性: 多个事务之间能够相互隔离,互不影响;
持久性: 能够保存到磁盘上,永久保存

数据库会出现的读数据出现的现象:

	1、脏读: 事务A 对数据进行插入操作,到是未commit(), 事务B对数据库读, 事务A对数据rollback()了,导致数据的脏读
	2、不可重复读: A 读取一条数据, B对数据修改了, A在读取数据, 导致了A两次读取的数据不一样,产生了不可重复读的现象
	3、幻读: A 对数据库所有数据读取了, B 添加了一条数据, A发现还有一条数据没有读取到, 导致了产生了幻读的感觉。

InnoDB的四种事务隔离级别:

	1、未提交读: 在其他事务还未提交,就能够读取到数据库的修改, 意味可以读取到脏数据    --------   事务的最低隔离级别
	2、已提交读: 事务没有进行提交,其他事务不能读取该数据 , 对单行数据进行加锁。		-------解决脏读
	3、可重复读: 对数据读取的时候添加锁, 在没有获得锁,对读取到的所有数据进行加锁。    ------解决不可重复读。
	4、序列化: 对整个表添加锁, 												   --------解决了幻读。
共享锁: 通过对整个数据的读取操作
排他锁: 通过对整个数据的修改操作

MySQL的索引:

普通索引=index, 唯一性索引=unique, 主键索引=primary key, 组合索引=index(id, name), 全文索引=fulltext

索引原则: 1、经常查询的字段添加索引,进程更新的字段避免添加索引
		  2、数据量的表不索引, 浪费资源
		  3、字段同一值少的不建立索引, 比如性别。

MySQL的数据內型:

	1、数值內型: int、float、DECIMAL(5.2)、TINYINT
	2、日期內型: DATE、TIME、DATETIME
	3、字符串內型: CHAR、VARCHAR(0, 65535)、TEXT

MySQL的引擎:

	MyISAM: 不支持事务,也不支持外键    优势: 查询速度快
	InnoDB: 支持事务,支持外键,支持自增长
	MEMORY: 使用内存来创建表,快速,经过HASH精确查询的, 无法使用like语句进行模糊匹配。

MySQL锁:

	1、共享锁、排他锁: 读数据加共享锁, 修改数据加排他锁

	2、悲观锁:通过加锁, 事务在修改记录过程中,锁定记录,别的事务无法并发修改,
	3、乐观锁:通过记录字段属性的方式, 采用记录的版本字段,来判断记录是否修改过, 

MySQL优化方式:

	1、选择最合适的字段属性
	2、尽量把字段设置为NOT NULL
	3、索引
	4、分库分表
	5、负载均衡
	6、数据库的参数优化,数据库池的管理
	7、外键的管理,去掉外键,利用程序控制。

优化的具体方法: 主要通过设置索引进行数据库的快速进行。
	explain  select * from user;     可以进行相关是否走索引优化这块的信息。
	主要观察的字段有:
		id : 相同id, 执行顺序从上往下执行, 不同id, 值越大,越先执行。
		select_type:  用来表示查询语句的类型, 查用的类型有:
			simple, 简单的查询
			primary, 主查询, 常常出现在多层查询的语句上
			union, 联合查询, 用于后面联合查询操作
			DERIVED, 零时表作为条件查询。
			subquery, 子查询
		type: 查询表连接数据库查询的类型
			system、const, 十分理想的情况下才能达到, 一个系统库, 一个是主键索引且只有一条数据。
			eq_ref, 查到的数据和所存在的数据库一致性
			ref, 根据索引查到的数据
			range, 根据range和limit等字段查询到的数值
			index,根据索引进行全局扫描得到的结果
			all, 根据扫库进行得到结果。
		key: 实际上进行数据查询使用的索引字段。

你可能感兴趣的:(SQL)