mysql 入门介绍(二)

索引篇

索引,索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针。更通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。。

优点:

       所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引

       大大加快数据的查询速度

缺点:

       创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加

       索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

       当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

      使用原则:

            通过上面说的优点和缺点,我们应该可以知道,并不是每个字段度设置索引就好,也不是索引越多越好,而是需要自己合理的使用。

       1、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引,

       2、数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。

       3、在一同值少的列上(字段上)不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

1. 普通索引

常规索引 只作为提高数据的查询效率来使用的

缺点:

  1. 提高了查询效率 但是降低了增删改的效率

  2. 索引文件 占用磁盘空间

01	–直接创建索引
02	CREATE INDEX index_name ON table(column(length))
03	–修改表结构的方式添加索引
04	ALTER TABLE table_name ADD INDEX index_name ON (column(length))
05	–创建表的时候同时创建索引
06	CREATE TABLE `table` (
07	`id` int(11) NOT NULL AUTO_INCREMENT ,
08	`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
09	`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
10	`time` int(10) NULL DEFAULT NULL ,
11	PRIMARY KEY (`id`),
12	INDEX index_name (title(length))
13	)
14	–删除索引
15	DROP INDEX index_name ON table

  

 

2. 唯一索引

唯一索引和主键索引 都一样 不能插入重复的值 不同的是 主键一个表只能存在一个 唯一索引可以存在多个

创建唯一索引

01    –创建唯一索引
02    CREATE UNIQUE INDEX indexName ON table(column(length))
03    –修改表结构
04    ALTER TABLE table_name ADD UNIQUE indexName ON (column(length))
05    –创建表的时候直接指定
06    CREATE TABLE `table` (
07    `id` int(11) NOT NULL AUTO_INCREMENT ,
08    `title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
09    `content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
10    `time` int(10) NULL DEFAULT NULL ,
11    PRIMARY KEY (`id`),
12    UNIQUE indexName (title(length))
View Code

3. 主键索引

主键索引是数据库中最常见的索引类型 主要确定数据表里数据记录的位置 给字段添加primary key 来确定索引值

注意:

  1. 每个表中 只能有一个主键索引

  2. 每个表中最好有一个主键索引 并不是必须的

  3. 主键索引可以有很多的候选项 (auto_increment,not null)

  4. 当表中的数据 被删除以后 auto_increment 依然记录着下一个数据插入的行号值

    • truncate 表名 清空表 并将自增归位

    • alter 表名 auto_increment=1

创建主键索引

mysql> create table myindex(
    -> id int unsigned primary key auto_increment not null
    -> );

  

4 全文索引(FULLTEXT)

MySQL从3.23.23版开始支持全文索引和全文检索,FULLTEXT索引仅可用于 MyISAM 表;他们可以从CHAR、VARCHAR或TEXT列中作为CREATE TABLE语句的一部分被创建,或是随后使用ALTER TABLE 或CREATE INDEX被添加。////对于较大的数据集,将你的资料输入一个没有FULLTEXT索引的表中,然后创建索引,其速度比把资料输入现有FULLTEXT索引的速度更为快。不过切记对于大容量的数据表,生成全文索引是一个非常消耗时间非常消耗硬盘空间的做法。

01	–创建表的适合添加全文索引
02	CREATE TABLE `table` (
03	`id` int(11) NOT NULL AUTO_INCREMENT ,
04	`title` char(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL ,
05	`content` text CHARACTER SET utf8 COLLATE utf8_general_ci NULL ,
06	`time` int(10) NULL DEFAULT NULL ,
07	PRIMARY KEY (`id`),
08	FULLTEXT (content)
09	);
10	–修改表结构添加全文索引
11	ALTER TABLE article ADD FULLTEXT index_content(content)
12	–直接创建索引
13	CREATE FULLTEXT INDEX index_content ON article(content)

  

存储类型-innodb/myisam

MySQL5.0支持的存储引擎包括MyISAM,InnoDB,BDB,MEMORY,MERGE等等,其中InnoDB和BDB提供事物安全表,其他存储引擎都是非事物安全表。 
创建新表的时候如果不指定存储引擎,那么系统会使用默认的存储引擎,5.5版本之前默认存储其引擎是MyISAM,5.5版本之后改为了InnoDB。

修改表存储类型

alter table 表名 engine=表存储类型

MyISAM和InnoDB的区别

  1. MyISAM表的存储文件为3个 InnoDB为2个

  2. MyISAM不支持事物 innodb支持

  3. MyISAM不支持外键 innodb支持

  4. MyISAM表的查询效率高于innodb 但是innodb的安全性高于MyISAM

(1) MyISAM的文件说明

  1. .frm文件 存储当前表结构的文件

    在innodb和MyISAM中都存在

  2. .MYD: 即MY DATA 存储表数据的文件

  3. .MYI:即 MY INDEX 存储表索引的文件

(2) InnoDB的文件说明

  1. .frm文件 存储当前表结构的文件

    在innodb和MyISAM中都存在

  2. .ibd 存储表数据和索引

事物篇

"王商银行"有很多用户,目前,A用户账户上的余额为8000元,B用户账上的余额为5000元,现在A用户要向B用户转账1000元。那么,当转账结束以后,A用户账户上的余额应该为7000元,B账户上的余额应该为6000元。那么上述过程在数据库中应该转换为如下操作。

操作1:修改A用户账户对应的余额记录,8000-1000.

操作2:修改B用户账户对应的余额记录,5000+1000

上述操作好像没毛病,但是假设,如果数据库刚刚完成操作1,好巧不巧,这个时候停电了,过了两分钟,又来电了,当我们再次查看数据库时,发现A用户余额为7000,比停电之前少了1000,发现B用户的账户余额仍然为5000,与停电之前一样,出现这种情况是因为数据库只完成了操作1,而没来得及完成操作2,那么,1000块大洋凭空消失了,所以,我们应该防止这样的悲剧发生,没错,解决方法就是使用事务。

事务可以只包含一条sql语句,也可以包含多条复杂的sql语句,事务中的所有sql语句被当做一个操作单元,换句话说,事务中的sql语句要么都执行成功,要么全部执行失败,事务内的sql语句被当做一个整体,被当做一个原子进行操作。

mysql中,innodb存储引擎是支持事务的,而且innodb存储引擎的事务完全符合ACID的特性,ACID是如下四大特性的首字母缩写。

A:atomicity    原子性

C:consistency   一致性

I:isolation    隔离性

D:durability   持久性

  1. 将当前表文件存储类型改为 innodb

    alter table 表名 engine=innodb;

  2. 查看当前表的提交类型

    select @@autocommit

    如果值为1 则为自动提交

  3. 改为手动提交(开启事物)

    set autocommit=0

  4. 事物开始
    begin;
  5. 执行各种SQL语句
  6. 提交或者回滚
    1. commit work;

    2. rollback work;

猜你喜欢

转载自www.cnblogs.com/zhouyi-/p/9283839.html
今日推荐