MySql入门篇(二)

  • 索引
  • 定义:排好序的快速查找的数据结构
  • 索引分类
  • 索引SQL
  • 在创建表时创建索引
  • 在以创建的表上添加索引
  • a.通过create语法创建
  • b.通过alter语法创建
  • 删除索引
  • 索引的执行过程
  • 事务
  • 事务的定义
  • 事务的特征(ACID)
  • 事务的使用
  • 1、查看事务是否自动提交
  • 2、修改是否自动提交
  • 3、事务操作
  • 3.1、开启事务:begin或者start transaction
  • 3.2、事务提交 commit
  • 3.3事务回滚 rollback
  • 3.5、保存点 savepoint point1(保存点名)


索引

定义:排好序的快速查找的数据结构

官方给出的定义:
除了维护数据本身外,mysql还提供了一种维护某种排好序的查找特点算法的数据结构,这种数据结构以某种特定的引用指向数据,这种数据结构就是索引。
优点:提高查询效率, 缺点:降低cpu利用率

索引分类

普通索引:没有限制条件,对任何的类型的字段都可以添加普通索引
唯一性索引:使用unique修饰的字段,值是不能重复的,该字段添加索引是唯一性索引 主键索引:使用primary
key修饰的字段会自动创建索引 单列索引:在单个属性上创建的索引 多列索引:联合索引:在多个属性上创建的索引
全文索引:使用fulltext参数设置的是全文索引,只支持char\varchar和text类型字段上,常使用在数据量较大的字符串类型上,方便提高查询效率
(myisam 存储引擎支持)

索引SQL

在创建表时创建索引

create table table_name(
属性名1 类型[完整性约束],
属性名2 类型[完整性约束],
。。。
属性名n 类型[完整性约束],
[unique|fulltext] index|key [别名](属性名1[长度][ASC|DESC)
);

UNIQUE是可选参数,表示索引为唯一性索引; FULLTEXT是可选参数,表示索引为全文索引;
INDEX和KEY参数用来指定字段为索引的,两者选择其中之一就可以了,作用是一样的; "别名"是可选参数,用来给创建的索引取的新名称;
"属性1"参数指定索引对应的字段的名称,该字段必须为前面定义好的字段; "长度"是可选参数,其指索引的长度,必须是字符串类型才可以使用;
"ASC"和"DESC"都是可选参数,"ASC"参数表示升序排列,"DESC"参数表示降序排列。

详细用法可查看

在以创建的表上添加索引

a.通过create语法创建
create [unique|fulltext] index 索引名称 on  表名(属性)

create unique index idx_id_name(id,name);

mysql any value函数使用 mysql values()_数据库

b.通过alter语法创建

alter table 表名 add[unique|fulltext] index 索引名(属性)

alter table tulun add index idx_name_1 (name);

mysql any value函数使用 mysql values()_mysql_02

删除索引

mysql any value函数使用 mysql values()_mysql any value函数使用_03


drop index idx_name_1 on tulun;

索引的执行过程

注意:研究索引的执行过程使用explain查看SQL的执行计划 explain的使用是直接在查询SQL前添加该关键字即可

mysql any value函数使用 mysql values()_字段_04


分析字段:主要是:

possible_keys表示SQL执行可能命中的索引,

key属性表示在执行过程中实际使用的索引名称,

rows:表示查询操作影响表中数据的行数给定需求:对student表中查询姓名为’GYSX’的用户信息

在Sname不添加索引时,查询操作的执行计划

mysql any value函数使用 mysql values()_数据库_05


在Sname未添加索引时,在执行过程中没有使用索引,查询时是全表扫描(rows=14),当数据库表数据量特别大时,这种查询效率是比较低的

添加索引:idx_name

mysql any value函数使用 mysql values()_mysql_06


在分析SQL执行计划:

mysql any value函数使用 mysql values()_sql_07

’ 添加索引后,通过explain分析,执行过程中命中了idx_name的索引,执行过程只影响了一行数据,在大数据量查询是使用索引的效率有大的提高’

索引如何做到提高查询效率的??(底层实现b树b+树)

事务

事务的定义

一个事务是有一条或者多条对数据库操作的SQL语句所组成的一个不可分割的整体,
事务要么全部执行完成,要么全部不执行

事务的特征(ACID)

原子性(Atomic)
事务是一个不可分割的整体,即对数据的修改要么全部执行,要么全不执行,不存在部分事务执行完成

一致性(Consistency)
一个事务执行前和执行后,数据库的数据必须保持一致性状态
例如:银行转账:A向B转账,A账户金额减少,B账户的金额增长,整个系统中金额不发生改变

隔离性(Isolation)
当两个或者多个事务并发执行是,为了保证数据的安全性,将一个事务的内部操作与其他的事务的操作隔离开,不被其他的事务所看到。

持久性(Durability)
事务完成之后,对数据库中的数据修改是永久性的,即使数据库出现故障重启,也应该恢复数据

事务的使用

1、查看事务是否自动提交

select @@autocommit

查看MySQL事务是否自动提交,默认是自动提交

1:自动事务提交 0:表示手动事务提交

mysql any value函数使用 mysql values()_sql_08

2、修改是否自动提交

set autocomIt=0

使用set autocomit=0操作,设置事务为手动提交

mysql any value函数使用 mysql values()_数据库_09

3、事务操作

3.1、开启事务:begin或者start transaction

begin 和start transaction显式开启一个事务

mysql any value函数使用 mysql values()_字段_10

3.2、事务提交 commit

当事务中所有的SQL执行完成后,通过commit将事务提交到数据库

mysql any value函数使用 mysql values()_mysql any value函数使用_11

3.3事务回滚 rollback

在事务执行过程中当有SQL执行失败将事务回滚,回滚到最初状态

mysql any value函数使用 mysql values()_mysql_12


另一个窗口查看:

mysql any value函数使用 mysql values()_sql_13

3.5、保存点 savepoint point1(保存点名)

savepoint point1 设置一个保存点为point1的保存点

rollback to point1:事务回滚到保存点1

mysql any value函数使用 mysql values()_字段_14