MySQL索引、事务与存储引擎
一、MySQL索引 1.1索引的概念 1.2索引的作用及优缺点 1.2.1优点
设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要原因。
1.2.2缺点
目录 一、MySQL索引 1.1索引的概念 1.2索引的作用及优缺点 1.2.1优点 设置了合适的索引之后,数据库利用各种快速定位技术,能够大大加快查询速度,这是创建索引的最主要原因。 1.2.2缺点 1.3创建索引的原则依据 索引可以提升数据库查询的速度,但不是任何情况下都是和创建索引。因为索引本身会消耗系统资源,在有索引的情况下,数据库会先进行索引查询,然后定位到具体的数据行,如果索引使用不当,反而会增加数据库的负担。 1.4索引的分类和创建 1.4.1普通索引 最基本的索引类型,没有唯一性之类的限制 直接创建索引
修改表方式创建
创建表的时候指定索引
1.4.2唯一索引 与普通索引类似,但区别是唯一索引列的每个值都唯一。唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。 直接创建唯一索引
修改表方式创建唯一索引
创建表的时候指定唯一索引
1.4.3 主键索引 是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。 创建表的时候指定主键索引 修改表方式创建主键索引 1.4.4 组合索引(单列索引与多列索引) 可以是单列上创建的索引,也可以是在多列上创建的索引。需要满足最左原则,因为 select 语句的 where 条件是依次从左往右执行的,所以在使用 select 语句查询时 where 条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。
1.4.5 全文索引(FULLTEXT) 适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。在 MySQL5.6 版本以前。 直接创建全文索引
修改表方式创建全文索引
创建表的时候指定全文索引
数据类型可以为 CHAR、VARCHAR 或者 TEXT 使用全文索引查询
1.5 查看索引
1.6 删除索引 直接删除索引
修改表方式删除索引
删除主键索引
二、MySQL事务 2.1 事务的概念 总的来说,事务就是一个操作序列,这些操作要么都执行,要么都不执行,是一个不可分割的工作单位。 2.2 事务的ACID特点 ACID,是指在可靠数据库管理系统(DBMS)中,事务(transaction)应该具有的四个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。这是可靠数据库所应具备的几个特性。 2.2.1 原子性 指事务是一个不可再分割的工作单位,事务中的操作要么都发生,要么都不发生。 2.2.2 一致性 指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏 2.2.3 隔离性 指在并发环境中,当不同的事务同时操纵相同的数据时,每个事务都有各自的完整数据空间。 事务之间的相互影响分为几种,分别为 (1)脏读:一个事务读取了另一个事务未提交的数据,而这个数据是有可能回滚的。 (2)不可重复读:一个事务内两个相同的查询却返回了不同数据。这是由于查询时系统中其他事务修改的提交而引起的。 (3)幻读:一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,另一个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,操作前一个事务的用户会发现表中还有没有修改的数据行,就好象发生了幻觉一样。 (4)丢失更新:两个事务同时读取同一条记录,A先修改记录,B也修改记录(B不知道A修改过),B提交数据后B的修改结果覆盖了A的修改结果。 Mysql 及事物隔离级别 (1)read_uncommitted : 读取尚未提交的数据 :不解决脏读 (2)read_committed:读取已经提交的数据 :可以解决脏读 (3)repeatable_read:重读读取:可以解决脏读 和 不可重复读 —mysql默认的 (4)serializable:串行化:可以解决 脏读 不可重复读 和 虚读—相当于锁表 mysql默认的事务处理级别是 repeatable read ,而Oracle和SQL Server是 read committed 。 查询全局事务隔离级别
查询会话事务隔离级别
设置全局事务隔离级别
设置会话事务隔离级别
2.2.4 持久性 在事务完成以后,该事务所对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。 小结 在事务管理中,原子性是基础,隔离性是手段,一致性是目的,持久性是结果。 2.3 事务控制语句 BEGIN 或 START TRANSACTION:显式地开启一个事务。 COMMIT 或 COMMIT WORK:提交事务,并使已对数据库进行的所有修改变为永久性的。 ROLLBACK 或 ROLLBACK WORK:回滚会结束用户的事务,并撤销正在进行的所有未提交的修改。 SAVEPOINT S1:使用 SAVEPOINT 允许在事务中创建一个回滚点,一个事务中可以有多个 SAVEPOINT;“S1”代表回滚点名称。 ROLLBACK TO [SAVEPOINT] S1:把事务回滚到标记点。 2.3.1 测试begin和commit(开始事务和提交事务) 2.3.2 测试事务未提交的回滚 2.3.3 测试创建回滚点并进行回滚 2.4 使用 set 设置控制事务 #禁止自动提交(状态为OFF) SET AUTOCOMMIT=0; #开启自动提交mysql索引表,Mysql默认为1(状态为ON) SET AUTOCOMMIT=1; #查看Mysql中的AUTOCOMMIT值 show variables like 'autocommit'; 注意: 三、MySQL存储引擎 3.1 MyISAM 表支持的3 种不同的存储格式 3.1.1 静态(固定长度)表 静态表是默认的存储格式。静态表中的字段都是非可变字段,这样每个记录都是固定长度的,这种存储方式的优点是存储非常迅速,容易缓存,出现故障容易恢复;缺点是占用的空间通常比动态表多。 3.1.2 动态表 动态表包含可变字段,记录不是固定长度的,这样存储的优点是占用空间较少,但是频繁的更新、删除记录会产生碎片,需要定期执行 OPTIMIZE TABLE 语句或 myisamchk -r 命令来改善性能,并且出现故障的时候恢复相对比较困难。 3.1.3 压缩表 压缩表由 myisamchk 工具创建,占据非常小的空间,因为每条记录都是被单独压缩的,所以只有非常小的访问开支。 3.2 控制语句 1)查看系统支持的存储引擎
2)查看表使用的存储引擎 法一:
法二:
3)修改存储引擎 通过 alter table 修改
通过修改 /etc/my.cnf 配置文件,指定默认存储引擎并重启服务
注意:此方法只对修改了配置文件并重启mysql服务后新创建的表有效,已经存在的表不会有变更。 通过 create table 创建表时指定存储引擎
(编辑:徐州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |