Mysql(二)-索引、存储引擎

##########################################################

Mysql索引:
类似于书的目录
类型:
--》普通索引 index
--》唯一索引 unique
--》主键 primary key
-->外键 foreign key

优点:
提高查询速度
缺点:
减缓写入的速度

########################################################################################
一、普通索引:index
查看索引:
desc 库名.表名;
show index from 库名.表名;

默认使用的索引类型:
BTREE(二叉树) hash B+Tree

创建索引:
--》建表时创建:
creat table 表名(
字段名 类型(宽度) 约束条件,
字段名 类型(宽度) 约束条件,
index(字段1),index(字段2)
);
create table t2 (
name char(10) not null,
index(name)
);

--》已有表添加索引:
create index 索引名 on 表名(字段名);
create index id on t1(id);

//注意:我们索引名与字段名可以不相同,但是为了方便辨认,我们一般将索引名与字段名设置相同。

删除索引:
drop index 索引名 on 表名;

##########################################################################################3

二、主键:primary key

使用规则:
-->设置主键的字段的值,不能重复,且不能赋空值
--》一个表只能有一个主键
--》如果,多个字段都作为primary key,称为复合主键,必须一起创建。
--》主键字段的key标志为pri
--》通常与auto_increment(自动增长),一起连用。

创建主键:
--》建表时创建:
create table 表名(
字段名1 类型(宽度) 约束条件,
字段名2 类型(宽度) 约束条件,
primary key(字段名1,字段名2)
);
create table t4(
id int auto_increment,            //设置自动增长(不赋值时,会根据上条记录自动加1)
name char(10),
primary key(id,name)            //设置复合主键
);

--》已有表创建:
alter table 表名 primary key(字段名);
alter table t1 primary key(id);

删除主键:
alter table 表名 drop primary key;

##########################################################################################

三、唯一索引:unique

使用规则:
--》字段值可以为null,但不能重复
--》当将字段修改为null,限制与主键相同,
--》表中可以有多个unique字段

创建唯一索引:
--》建表时创建:
create table 表名(
字段名1 类型(宽度) 约束条件,
字段名2 类型(宽度) 约束条件,
unique(字段名1),
unique(字段名2)
);
create table t5(
id int,
name char(10),
unique(id),
unique(name)
);

--》已有表创建:
create unique index 索引名 on 表名(字段名);

删除唯一索引:
drop index 索引名 on 表名;

#############################################################################################

四、外键:foreign key
外键:
让当前表字段的值在另一个表中字段值的范围内选择。

使用规则:
--》表的存储引擎必须是innodb
--》字段类型要一致
--》被参照字段必须要是索引类型的一种

创建外键:

命令:foreign  key(字段名)  references  表名(字段名)
        on  update cascade     on  delete cascade

create table jfb(
id int auto_increment,
name char(10),
pay  float(7,2),
primary key(id),
);

create table xsb(
num int,
name char(10),
class char(10),
foreign key(num) references key(id) on update cascade on delete cascade
);

//创建jfb表,创建xsb表。xsb的num需要参考jfb中的id字段。即将num设为外键,将jfb中的id设为参考键。并设置自动更新。

insert into jfb values(1,"bob",20000),(2,"lucy",19000);

insert into xsb values(3,"jim","1709");    //无法插入,因为num的值,不在jfb的id值范围内。
insert into xsb values(1,"jim","1709";    //插入成功

update jfb set id=6 where name=“bob”        
select * from xsb;                //更新jfb中的id字段数据,查看xsb中的记录,也同时更新

delete from jfb where name=“bob”;
selece * from xsb;                //删除jfb表中记录,xsb中的记录也随之删除。

查看外键:
show create table 表名;                //可以查看外键信息,包含外键名

删除外键:
alter table 表名 drop foreign key 外键名;

##############################################################################################

mysql存储引擎:

一、介绍:
mysql数据库服务软件自带的程序,不同的存储引擎有不同的功能和数据存储方式,是表的处理器。

mysql服务体系结构:
连接池
sql接口
分析器
优化器
查询缓存
存储引擎
文件系统
管理工具

########################################################################################

二、基本设置、
查看数据库服务使用的存储引擎:
show engines;
查看表使用的存储引擎:
show create table 表名;

设置数据库服务使用的存储引擎:
vim /etc/my.cnf
[mysql]
default-storage-engine=引擎类型
设置表的存储引擎:
create  table  表名(。。。。);                //使用默认引擎
create  table  表名(。。。。)engine=innodb;        //设置存储引擎为innodb

修改表使用的存储引擎:
alter table 表名 engine=存储引擎类型;

################################################################################3

三、常用引擎的特点:
myisam特点:
表.MYI   索引信息
表.MYD  数据
表.frm   表结构
支持表级锁 (锁一张表)
不支持事务  事务回滚

innodb特点:
表.frm   表结构
表.ibd   索引信息+数据
支持行级锁 (只给当前被访问的行加锁)
支持事务  事务回滚

锁的作用:解决并发访问冲突问题。

锁类型 :读锁    和   写锁

锁粒度 : 行级锁    表级锁

事务: 一次数据访问从开始到结束的过程 称为事务
事务回滚:  一次数据访问 任意一步执行失败,恢复所有操作。
事务的特性:  一致性  原子性  隔离性

事务日志文件:记录对innodb存储引擎的表执行过的操作。

工作如何如何决定表使用的存储引擎:
接收写操作多的表适合使用innodb存储引擎。
接收读操作多的表适合使用myisam存储引擎

原文地址:http://blog.51cto.com/13399301/2055220

时间: 2024-10-04 23:52:00

Mysql(二)-索引、存储引擎的相关文章

MySQL 架构组成--存储引擎

http://hongge.blog.51cto.com/ MySQL Server 系统架构 在前一节中我们学习了mysql的逻辑模块组成,接下来我们来学习mysql存储引擎. 一.mysql存储引擎介绍: MySQL在5.1(不包括)之前的版本中,存储引擎是需要在MySQL 安装的时候就必须和MySQL 一起被编译并同时被安装的. 但是从MySQL5.1 开始,MySQL AB 对其结构体系做了较大的改造,并引入了一个新的概念:插件式存储引擎体系结构.MySQL AB 在架构改造的时候,让存

细聊MySQL的Innodb存储引擎(二)

细聊MySQL的Innodb存储引擎(一) 上一篇主要和大家探讨了下Innodb的锁机制与隔离机制.本篇来和大家一起研究下在使用Innodb是会出现的问题以及如何解决它们. Innodb是如何解决幻读问题的 什么是幻读?听起来似乎很高端,但实际上它只是反映了事务中的一种数据不一致的情况.下面看我来描述这样一个场景,通过这个场景,大家就能很清楚的知道幻读到底是什么意思. 打开两个客户端,设为A和B A客户端 mysql> start transaction; (步骤一) Query OK, 0 r

mysql常识以及存储引擎,锁和事务

常见的数据库系统: 1.甲骨文的Oracle 2.IBM的DB2 3.微软的Access和 SQL Server 4.开源PostgreSQL 5.开源MySQL mysql数据库三阶段: 初期开源数据库阶段 sun mysql阶段 oracle mysql阶段 OLTP:联机事务处理,面向基本的.日常的事务处理. OLAP:联机分析处理,数据仓库的主要应用. mysql分支版本(一些): MariaDB : Maria引擎室myisam存储引擎的升级版本,增加了对Hash join的支持和Se

mysql三:存储引擎

一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件应该有不同的类型:比如存文本用txt类型,存表格用excel,存图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎. 存储引擎说白了就是如何存储数据.如何为存储的数据建立索引和如何更新.查询数据等技术的实现方法.因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和操作此表的类型) 在O

转!!MySQL中的存储引擎讲解(InnoDB,MyISAM,Memory等各存储引擎对比)

MySQL中的存储引擎: 1.存储引擎的概念 2.查看MySQL所支持的存储引擎 3.MySQL中几种常用存储引擎的特点 4.存储引擎之间的相互转化 一.存储引擎: 1.存储引擎其实就是如何实现存储数据,如何为存储的数据建立索引以及如何更新,查询数据等技术实现的方法. 2.MySQL中的数据用各种不同的技术存储在文件(或内存)中,这些技术中的每一种技术都使用不同的存储机制,索引技巧,锁定水平并且最终提供广泛的不同功能和能力.在MySQL中将这些不同的技术及配套的相关功能称为存储引擎. 二.MyS

细聊MySQL的Innodb存储引擎(完)

细聊MySQL的Innodb存储引擎(一) 细聊MySQL的Innodb存储引擎(二) 细聊MySQL的Innodb存储引擎(完) 上篇主要和大家探讨了Innodb引擎中出现幻读的处理方法与死锁的探测及避免死锁的一些注意事项.此篇,我们来研究下Innodb的索引. Innodb里涉及到的索引主要有四种,分别为聚簇索引(Clustered Index).次级索引(Secondary Index).全文索引(FULLTEXT Index).哈希索引(Hash Index). 聚簇索引与次级索引 每一

mysql缓存、存储引擎

一.         mysql查询缓存 查询缓存不是mysql的子系统,却是查询优化和执行子系统不可缺少的组成部分.它不仅可以缓存查询结果,还可以缓存查询结果本身.如果某个查询的结果就在缓存里, 系统就可以直接取出那些数据返回给客户端而跳过整个查询优化和执行阶段:这对那些使用频繁的查询来说效果尤其显著.这技术是mysql独有的,其他数据库只缓存查询,不缓存查询结果.查询缓存还必须能够处理查询结果变“脏”的情况,即数据在上次查询后发生了一些变化,以及及时不时地对被缓存的查询进行清理. 查询缓存是

MySQL数据库InnoDB存储引擎中的锁机制

MySQL数据库InnoDB存储引擎中的锁机制    http://www.uml.org.cn/sjjm/201205302.asp   00 – 基本概念 当并发事务同时访问一个资源的时候,有可能导致数据不一致.因此需要一种致机制来将访问顺序化. 锁就是其中的一种机制.我们用商场的试衣间来做一个比喻.试衣间供许多消费者使用.因此可能有多个消费者同时要试衣服.为了避免冲突,试衣间的门上装了锁.试衣服的人在里边锁住,其他人就不能从外边打开了.只有里边的人开门出来,外边的人才能进去. - 锁的基本

谈谈MySQL两种存储引擎

Mysql有两种存储引擎:InnoDB与Myisam 二者之间有六大区别:   MyISAM InnoDB 构成上的区别: 每个MyISAM在磁盘上存储成三个文件.第一个 文件的名字以表的名字开始,扩展名指出文件类型..frm文件存储表定义.数据文件的扩 展名为.MYD (MYData).索引文件的扩 展名是.MYI (MYIndex). 基于磁盘的资源是InnoDB表空间数据文件和它的日志文件,InnoDB 表的 大小只受限于操作系统文件的大小,一般为 2GB 事务处理上方面: MyISAM类

MySQL支持多种存储引擎

MySQL的强大之处在于它的插件式存储引擎,我们可以基于表的特点使用不同的存储引擎,从而达到最好的性能. MySQL有多种存储引擎:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERATED.ARCHIVE.CSV.BLACKHOLE. MySQL支持数个存储引擎作为对不同表的类型的处理器.MySQL存储引擎包括处理事务安全表的引擎和处理非事务安全表的引擎: MyISAM管理非事务表.它提供高速存储和检索,以及全文搜索能力