02: MySQL 索引类型 、 MySQL 存储引擎

day02
一、mysql索引
二、MySQL存储引擎
+++++++++++++++++++++++++++++++++++
一、mysql索引
1.1 索引介绍 : 相当于 “书的目录”

5000页
1~200 目录信息
拼音排序
部首排序
笔画排序

201~5000 正文

1.2 索引的优点与缺点?
优点 加快查询的速度
缺点 占用物理存储空间,减慢写的速度。

姓名 性别 班级 年龄
jim
jim
NULL

1.3 使用普通索引index:(在表中的字段上创建索引)
使用规则?
查看 desc 表名; key ----> MUL
show index from 表名;
Table: t23
Key_name: name
Column_name: name
Index_type: BTREE ( B+TREE Hash )
二叉树
1-10
1-5 6-10
1-2.5 2.6-5

创建index 索引:
创建表时 指定索引字段
create table 表名(
字段名列表,
index(字段名1),
index(字段名2),
);
create table db1.t23(
name char(10) ,
sex enum("boy","girl") default "boy" ,
age tinyint(2) unsigned not null default 18,
index(name),
index(sex)
);
desc db1.t23;
show index from db1.t23\G;

在已有表里创建index索引字段
create index 索引名 on 表名(字段);

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

二、主键primary key 的使用
2.1 使用规则?

2.2 查看
desc 表名; key ----> MUL
show index from 表名;

2.3 创建
2.3.1 建表时创建
create table t25(
stu_id char(9) primary key ,
name char(10),
sex enum("boy","girl"),
age tinyint(2) unsigned
);
create table t24(
stu_id char(9),
name char(10),
sex enum("boy","girl"),
age tinyint(2) unsigned,
primary key(stu_id)
);
2.3.2 在已有表里创建
alter table 表名 add primary key(字段名);
2.4 删除主键 alter table 表名 drop primary key;

2.5复合主键的使用(表中多个字段一起做主键 ,复合主键字段的值不允许同时重复,要一起创建)
PRI PRI
name class pay
jim nsd1710 yes
jim nsd1712 no
建表时创建
create table db1.xfb(
name char(10),
class char(7),
pay enum("yes","no") default "no",
primary key(name,class)
);
验证
insert into db1.xfb values("jim","nsd1710","yes");
insert into db1.xfb values("jim","nsd1710","yes");
insert into db1.xfb values("jim","nsd1710","no");
insert into db1.xfb values("bob","nsd1710","yes");
insert into db1.xfb values("bob","nsd1703","no");
删除复合主键 alter table 表名 drop primary key;
在已有表里添加复合主键。
alter table 表名 add primary key(字段名列表);
++++++++++++++++++++++++++++++++++++++++++
2.6 primary key 与 auto_increment 连用
字段的值自动增长i++ i=$i+1
数值类型
primary key

id name age sex
1 jim 21 boy
2 tom 19 boy
create table db1.t26(
id int(2) zerofill primary key auto_increment,
name char(10),
age tinyint(2) unsigned,
sex enum("boy","girl","no")
);

insert into db1.t26(name,age,sex) values("bob",21,"boy");
insert into db1.t26(name,age,sex) values("bob",21,"boy");
insert into db1.t26(name,age,sex) values("bob",21,"boy");
select * from db1.t26;

唯一索引 unique

          pri                pri

姓名 护照编号 驾驶证号
null null

使用规则?
查看 desc 表名; key ----> UNI

创建
建表时创建
create table db1.t27(
name char(10),
hz_id char(5),
jsz_id char(5),
unique(hz_id),
unique(jsz_id)
);
desc db1.t27;
insert into db1.t27 values("jim","aaa","bbb");
insert into db1.t27 values("jim","aaa","bbb");
insert into db1.t27 values("jim","aaab","bbbc");
insert into db1.t27 values("jim",null,null);

create table db1.t28(
name char(10),
hz_id char(5) not null,
jsz_id char(5),
unique(hz_id),
unique(jsz_id)
);
desc db1.t28;

在已有表里创建unique
create unique index 索引名 on 表名(字段名);

删除 drop index 索引名 on 表名;
+++++++++++++++++++++++++++++++++++++++
三、外键的使用
外键作用?
外键的使用规则?
创建外键:
foreign key(字段名) references 表名(字段名)
on update cascade on delete cascade

jfb 缴费表
学号
jfb_id name pay

create table db1.jfb(
jfb_id int(2) primary key auto_increment,
name char(10),
pay float(7,2) default 20000
)engine=innodb;

insert into db1.jfb(name)values("bob"),("tom");

bjb 班级表
外键
学号
bjb_id name pay

create table db1.bjb(
bjb_id int(2) ,
name char(10),
pay float(7,2) default 20000,
foreign key(bjb_id) references jfb(jfb_id)
on update cascade on delete cascade
)engine=innodb;

alter table bjb add primary key(bjb_id);

use db1;
show create table bjb;

验证外键?
insert into bjb values(1,"bob",20000);
insert into bjb values(3,"lucy",20000);
insert into jfb(name)values("lucy");
insert into bjb values(3,"lucy",20000);

update 表名 set 字段名=值 where 条件;
update jfb set jfb_id=8 where jfb_id=2;
select from jfb;
select
from bjb;

delete from 表名 where条件;
delete from jfb where jfb_id=3;
select from jfb;
select
from bjb;

使用要注意的事项?

删除外键 alter table 表名 drop foreign key 外键;
show create table bjb;
alter table bjb drop foreign key bjb_ibfk_1;
在已有表里创建外键:
alter table bjb add foreign key(bjb_id) references jfb(jfb_id)
on update cascade on delete cascade;

+++++++++++++++++++++++++++++++++++
四、MySQL存储引擎
4.1 MySQL存储引擎介绍:是数据库服务自带的功能程序,
处理表的处理器
每种存储引擎的功能和数据存储方式都不同
4.2 查看
表使用的存储引擎 show create table 表名;

数据服务使用的存储引擎
show engines;
InnoDB | DEFAULT

4.3 修改
表使用的存储引擎?
alter table 表名 engine=存储引擎名;

建表时指定表使用的存储引擎?
create table 表名(
字段名列表
.....
)engine=存储引擎名;
数据服务使用的存储引擎?
vim /etc/my.cnf
[mysqld]
default-storage-engine=myisam
.....
:wq
#systemctl restart mysqld
++++++++++++++++++++++++++++++++
4.4 生产环境中常用存储引擎及特点
myisam特点
支持表级锁
不支持外键 、事务、事务回滚
数据存储方式 .frm .MYI .MYD
表结构 索引 数据
innodb特点
支持行级锁、 外键 、事务、事务回滚
数据存储方式 .frm .ibd
表结构 索引+数据

锁的作用:解决并发访问的冲突问题
锁类型:读锁(共享锁) 写锁(排它锁)
锁粒度:表锁 行锁 (页锁)

事务:一次sql操作从连接到断开连接的过程称为事务。要么全部执行成功,任意一步错误,执行都失败。

ATM
插卡
转账: 对方卡号 11111
汇款金额 50000
转账中。。。。。

退卡

事务回滚:事务执行过程,任意一步执行不成功,会恢复所有的操作。

innodb存储引擎的表使用事务文件记录执行过的sql操作。
cd /var/lib/mysql/db1/t1.*
ls
ib_logfile0
ib_logfile1
ibdata1

insert into t1 values(101),(102);

4.5 建表时如何决定表使用哪种存储引擎
接收查访问多的表,适合使用myisam存储引擎,节省系统资源。
接收写访问多的表,适合使用innodb存储引擎,并发访问量大。

原文地址:http://blog.51cto.com/13478354/2064353

时间: 2024-10-11 16:18:26

02: MySQL 索引类型 、 MySQL 存储引擎的相关文章

MySQL表类型和存储引擎版本不一致解决方法

使用的是老版本的mysql客户端Navicate 8 ,mysql 服务端用的是mysql5.6的版本,在修改版本引擎的时候出现版本不对; mysql error ‘TYPE=MyISAM’ 解决办法: Replace TYPE=MyISAM with ENGINE=MyISAM The problem was “TYPE=MyISAM” which should be “ENGINE=MyISAM” as per MySQL version updates – a simple search

MySQL索引类型 & Mysql索引会失效的几种情况分析

MySQL索引类型介绍 (1)普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式: CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度:如果是BLOB和TEXT类型,必须指定 length,下同. ALTER mytable ADD INDEX [indexName] ON (username(length)) CREATE TABLE mytable( ID

《深入浅出Mysql》——第二篇 开发篇 第七章 表类型(存储引擎)的选择

和大多数数据库不同,MySQL 中有一个存储引擎的概念,针对不同的存储需求可以选择最 优的存储引擎.本章将详细介绍存储引擎的概念.分类以及实际应用中的选择原则. 插件式存储引擎是 MySQL 数据库最重要的特性之一,用户可以根据应用的需要选择如 何存储和索引数据.是否使用事务等.MySQL 默认支持多种存储引擎,以适用于不同领域 的数据库应用需要,用户可以通过选择使用不同的存储引擎提高应用的效率,提供灵活的存 储,用户甚至可以按照自己的需要定制和使用自己的存储引擎,以实现最大程度的可定制性. 查

MySQL中常用的存储引擎(MyISAM 和InnoDB)

 数据库存储引擎是数据库底层软件组件,数据库管理系统(DBMS)使用存储引擎进行创建.查询.更新和删除数据操作.不同的存储引擎提供不同的存储机制.索引技巧.锁定水平等功能,使用不同的存储引擎,还可以获得特定的功能.现在许多的数据库管理系统都支持多种不同的存储引擎.MySQL的核心就是存储引擎. 使用 SHOW ENGINES; 命令查看MySQL支持的存储引擎,  Support 列表示某种引擎是否可以使用,YES表示可以,NO表示不可以,DEFAULT表示当前默认存储引擎. mysql> SH

MySQL技术内幕-InnoDB存储引擎-读书笔记(二)

MySQL技术内幕-InnoDB存储引擎-读书笔记(二) 作为php开发,使用mysql总是少不了的 系列文章博客链接 http://itsong.net/articles/466.html 第三章 文件 mysql与innodb几个类型的文件 参数文件,配置路径.初始化参数.内存大小等 日志文件,包括错误日志,二进制日志,慢查询日志,查询日志 socket文件,用unix域套接字,unix domain socket来进行连接时需要的文件,这一般是本机连接,比通常tcp快 pid文件,进程id

MySQL技术内幕-InnoDB存储引擎-读书笔记(一)

MySQL技术内幕-InnoDB存储引擎-读书笔记(一) 作为php开发,使用mysql总是少不了的 博客链接 http://itsong.net/articles/466.html 第一章 MySQL体系结构和存储引擎 MySQL被设计为一个单进程多线程架构的数据库 ./mysql --help | grep my.cnf 可以查看mysql数据库实例启动时,它会在哪些位置查找配置文件. 配置文件中有一个datadir参数,指定了数据库所在的路径.默认为/usr/local/mysql/dat

MYSQL 浅谈MyISAM 存储引擎

思维导图 介绍 mysql中用的最多存储引擎就是innodb和myisam.做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对<高性能MYSQL>书中提到的myisam的理解,请大家多多指教. 特点 > 不支持事务 证明如下: >> 表记录:t2表的engine是myisam. >> 操作 注意:如果你在数据库进行事务操作,但是事务无法成功,你就要看你的表引擎了,看这种引擎是否支持事务. >> 下面请看innodb中的事务操作 &g

mysql索引类型说明

btree和hash Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash 索引的查询效率要远高于 B-Tree 索引. 可能很多人又有疑问了,既然 Hash 索引的效率要比 B-Tree 高很多,为什么大家不都用 Hash 索引而还要使用 B-Tree 索引呢?任何事物都是有两面性的,Hash 索引也一样,虽然 Hash 索引效率高,但是 Hash 索引本身由于其特殊性也带来了很

mysql索引类型以及如何创建高性能的索引

B-tree       ---默认的索引类型 存储引擎会以不同的方式使用B-tree索引,性能也不一样.myisam使用前缀压缩技术,是索引更小,通过数据的物理位置引用索引的行.InnoDB按照原数据格式进行存储,根据主键引用索引的行. 2.B+tree        --- 3.哈希索引        --只有memory引擎支持.无法排序. 4.R-tree 5.全文索引 mysql索引类型以及如何创建高性能的索引,布布扣,bubuko.com

Mysql技术内幕——InnoDB存储引擎

一.mysql体系结构和存储引擎 1.1.数据库和实例的区别 数据库:物理操作系统或其他形式文件类型的集合.在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件. 数据库实例:由数据库后台进程/线程以及一个共享内存区组成.数据库实例才是真正用来操作数据库文件的. mysql数据库是单进程多线程的程序,与sql server比较类似.也就是说,Mysql数据库实例在系统上的表现就是一个进程. 1.2.mysql的体系结构 mysql由连接池组件.管理服务和工具组件.sql接口组建