简介
1·索引及分类 2·创建及查看索引 3·事务的概念及特点 4·事务的操作 5·总结
拓展:
在开始了解索引之前,得学会安装 MySQL 和它的一些基本的命令,可以看看之前的一片文章:MySQL安装与基本命令
索引及分类
1·索引的概念:
什么是索引,不用专业术语来描述,通俗的来讲,就是一本书的目录,或一本小说的目录,有了目录就可以快速定位我需要找到的内容。专业点的来讲,就是为了提高数据库的搜索效率而对某写字段中的值建立的目录。
2·索引的作用
知道了它的概念,那么作用不言而喻。但是有利有弊,得到什么就必须牺牲什么,索引使我们可以加快查询表中的记录,那么也会付出相对应的代价:1·增加了数据库的存储空间;2·在插入和修改数据时要花费较多的时间。 ** 以上是代价,但是相比代价,索引的作用更为突出**: 1·最主要的就是有了索引就会加快数据查询速度 2·当库中的表很大时,索引的作用就体现的非常明显,一个字’快‘ 3·降低数据库的 I0 成本,就是输出和输入成本 4·创建唯一性索引,可以保持数据库表中每一行数据的唯一性 5·加快表与表之间的连接
3·索引的分类
1·普通索引:这是最基本的索引类型,没有唯一性限制 2·唯一性索引:和普通索引基本相同,唯一的区别是索引列的所有值只能是唯一的 3·主键索引:是唯一索引的特定类型,它必须指定为“PRIMARY KEY”。在数据库中为表定义主键将自动创建主键索引。 4·全文索引,索引类型为FULLTEXT,全文索引可以在CHAR、VARCHAR的列上创建 5·单列索引与多列索引:索引可以是单列上创建的索引,可以是多列上创建的索引
4·创建索引的原则依据
凡是有规矩,创建索引也必须有条件的,不能乱创建,乱创建反而会增加数据库的负担,因为索引也会消耗系统资源。以下是一些创建的依据 1·表的主键、外键必须有索引 2·数据量超过2000 行的表应该有索引 3·经常与其他表进行连接的表,在连接字段上需要索引 4·唯一性太差的字段不适合建立索引 5·更新频繁的字段不适合创建 6·经常出现在 where 子句中的字段,需要建立 7·应该建立选择性较高的字段上 8·可以在小字段上建立索引
索引详细信息表
显示参数 | 描述 |
---|---|
Table | 表的名称 |
Non_unique | 索引值的唯一性,0表示唯一性,1表示非唯一性 |
Key_name | 索引的名称 |
Seq_in_index | 索引中的列序号,从1开始 |
Column_name | 列名称 |
创建及查看索引
1·创建普通同索引,命令格式是:
create index 索引名字 on 表名(列名);
2·首先需要确保库中有表,表中有数据,这里为了实验效果,在之前就创建了一张表
mysql> select * from school;
3·那么 以这张表中的 “ id ” 字段为所有,所有的名字是 id_index 所以普通索引为:
mysql> create index id_index on school(id);
4·查看你创建的索引格式
mysql> show index from school(表名)\G;
5·创建唯一性索引、并且查看,以下图为例:
mysql> create unique index unique_index on school(id);
6·创建主键所有,它有两种方式,一种是创建表的同时就创建了主键,一种是创建表时没有指定主键,这里演示第二种,它的命令格式是:
mysql> alter table school add primary key(id);
7·创建全文索引,只有在MyISAM 类型表是才有效,它可以建立在 TEXT、CHAR、VARCHAR类型字段中。这里只演示修改表类型时指定索引。
mysql> alter table school add fulltext(姓名);
8·创建了索引,但是在不需要的时候需要删除,下面是演示删除索引 mysql> drop index id_index on school; -----(直接删除索引) mysql> alter table school drop index unique_index; ----- (修改表时删除所有) mysql>alter table school drop primary key; ----- (删除主键索引)
事务的概念及特点:
事务的概念
1·事务是一种机制、一个操作序列,包含了一组数据库操作命令,并且把所有的命令作为一个整体以起向系统提交或撤销操作请求,通俗的来说就是这一组命令要么都执行,要么不执行。 2·事务是一个不可分割的工作逻辑单元,在数据库系统上执行并发操作时,事务是最小的控制单元。 3·事务适用于用户同时操作数据库系统的场景,比如:银行、保险公司、证券交易系统等,通过事务的整体性保证数据的一致性 4·事务是保持了一组操作的平稳性和可预测性的技术。
总结一下:你执行的一系列操作,要么完整的执行,要么完全不执行。一般情况下,操作顺利进行,最终操作成功。但是如果在这一系列过程中任何一个环节除了差错,数据库中的所有信息都必须保持在你开始操作前的状态。否则,数据库的信息将会一片混乱而不可预测。
事务的 四大特性
1·事务的原子性:事务时一个完整的操作,各个元素是不可分的。 2·事务的一致性:当完成时,数据必须处于一致状态;在事务开始之前,数据库中储存的数据处于一致状态;在正在进行的事务中,数据可能处于不一致的状态;当事务完成时,数据必须再次回到已知的一致状态 3·隔离性:对数据进行修改的所有并发事务时彼此隔离的,这表名事务必须时独立的,它不会以任何方式依赖于或影响其他事务。 4·持久性:不管系统是否发送了故障,事务处理的结果都是永久的。一旦事务被提交,事务的效果会被永久地保留在数据库中。
MySQL事务操作的两种方法: 1·使用事务处理命令控制 2·使用set设置事务的处理方式
1·事务处理命令控制: ·begin :表示开始一个事务,后面会有多条数据库操作语句执行。 ·commit:表示提交一个事务,对应前面的begin操作,他们之间的数据库操作语句以起完成 ·rollback:表示回滚一个事务,在begin和commit之间,如果某一个数据库操作语句出现错误,执行rollback 回滚,数据库就会回到begin之前的状态,也就是操作语句都没执行。
事务处理命令控制举例: 1·事务提交范例:
mysql> begin; ----(事务开始) mysql> insert into school values(8,'王总',91,232,'看书'); ------(第一个插入) Query OK, 1 row affected (0.00 sec) -----(提示正确执行) mysql> insert into school values(7,'小红',60,255,'游戏'); -------(第二个插入) Query OK, 1 row affected (0.01 sec) --------(提示正确执行) mysql> commit; -------------(提交事务) Query OK, 0 rows affected (0.01 sec) -----------(正确执行)
2·事务回滚范例
mysql> begin; -----(开始事务) Query OK, 0 rows affected (0.00 sec)
mysql> insert into school values(9,'王力宏',77,888,'唱歌'); ----(插入一条数据) Query OK, 1 row affected (0.00 sec)
mysql> select * from school; -----(数据没有提交或回滚之前查看,结果如下图)
mysql> rollback; -------(执行回滚命令) Query OK, 0 rows affected (0.01 sec)
mysql> select * from school; ---------(再次查看表中信息,结果如下图)
rollback 定义回滚点
·很多时候一个事务会包含很多条语句,而出现问题需要回滚时,不一定就直接回到起点,这样的话之前写的语句就全都白费了,那么这时候就要使用 savepoint 定义回滚点,这个回滚点就相当于 VMware 虚拟机中拍个快照,有这么一个意思。
savepoint 举例: mysql> begin; ----(开始事务) mysql> insert into school values(9,'王力宏',77,888,'唱歌'); -----(插入一条语句) mysql> savepoint s1; -----(定义一个回滚点) mysql> insert into school values(10,'那英',88,666,'跳舞'); -------(插入第二条语句) mysql> savepoint s2; ---- (再定义一个回滚点)
使用rollback 回滚到指定的点 mysql> rollback to savepoint s1; --------(回滚到自己定义的一个点,如下图)
总结:
1·数据库索引分为:普通索引、唯一索引、主键索引、全文索引、多列索引 2·数据库索引可以协助快速查询表中数据,但并不是任何字段都需要创建索引 3·数据库事务的四大特性:原子性、以执行、隔离性、持久性。 4·MySQL 事务命令有:begin、rollback、commit、savepoint。