运维之mysql篇------2. MySQL 索引类型 、 MySQL 存储引擎
2017-11-10 16:45
676 查看
Two day
索引 类似与 书的目录
查字典:部首笔画 拼音
stuinfo
name sex age class s_year birthday
键值
索引te点:
Index:普通索引: MUL :表可多个index----可重复可null---对象经常作为查询条件
Unique:唯一索引 : UNI :可多个 ;不可重复 允许为null;(当修改为not null,变为主键PRI,但性质不同)
Fulltext;全文索引
Primary key: 主键 : PRI :表只有一个(做唯一标识用)----不可重复不可nul----常与auto_increment连用l; 若多个称为复合主键
Foreign key:外键 使用条件:存储引擎必须是innodb;字段类型一致;被参照字段必须是索引类型的一种(primary key)
************************************
1.Index:
show index from 表名; 查看表中的index
使用: 使用规则 创建 查看 删除
index使用规则?
创建index:
create index 索引名 on 表(字段);
create index abc on t22(name); #在已有表里添加index字段
desc t22;
show index from 表名\G; #查看表中index
drop index 索引名 on 表名;
drop index abc on t22; #删除跳t22表的index
create table 库.表( ##在未有表中创建index
字段列表,
index(字段名),
index(字段名),
index(字段名)
);
create table studb.t24(
name char(10) ,
age tinyint unsigned default 21,
sex enum("boy","girl") not null default "girl",
likes set("film","game","music","it") default "film,game",
index(name),
index(sex)
);
********************************************************
主键的使用:
1.在未有表中创建主键
create table t25(
字段名列表,
primary key(字段名)
);
create table t25(
stu_id char(9),
name char(10),
sex enum("m","w"),
age tinyint(2),
primary key(stu_id)
);
desc t25;
insert into t25 values(null,"tom","m",21);
2.删除主键
alter table 表 drop primary key;
alter table t25 drop primary key;
3.在已有表里添加主键
alter table 表 add primary key(字段名);
alter table t25 add primary key(stu_id);
*****************************************************************
复合主键(多个字段一起做主键)
复合主键字段的值不允许同时相同。
1.在未有表中创建复合主键
create table 库.表(
字段名列表,
primary key(字段名列表)
);
create table t26(
cip varchar(15),
serport smallint,
status enum("deny","allow"),
primary key(cip,serport)
);
insert into t26 values("1.1.1.1",21,"deny");
PRI PRI
cip serport status
1.1.1.1 21 deny
2.1.1.1 21 allow
2.1.1.1 22 deny
2.1.1.1 22 allow
2.删除复合主键
alter table t26 drop primary key;
3.在已有表里添加复合主键。
alter table 表 add primary key(字段名列表);
alter table t26 add primary key(cip,serport);
4.主键通常与 AUTO_INCREMENT 连用,实现字段值的自增长
主键
数值类型 i++ i=i+1
create table t27(
id int primary key auto_increment,
name char(10),
age tinyint ,
sex enum("man","girl"),
class char(7) default "nsd1707"
);
insert into t27(name,age,sex) values("tom",21,"man");
create table t7(
name char(5),
email varchar(10),
age tinyint
);
t1 t2
name name
varchar(4) char(4)
jerry jerry
lucy lucy
jim jim
ab ab
a a
cpu
日期时间类型 nsd1707
select * from t27 where id=2
******************************************888
unique唯一索引
1.在未有表中创建unique字段:
create table t28(
name char(10),
hzid char(5), #对应显示UNI
jsid char(5) not null, #对应显示RPI
unique(hzid),
unique(jsid)
);
insert into t28 values("jim","11111","33333");
UNI
姓名 护照 驾驶证 身份证
JIM null null 111111
2.删除unique 索引
drop index 索引名 on 表;
Drop index hzid on t28;
3.在已有表里添加 unique 索引
create unique index 索引名 on 表(字段名);
Create unique index aaa on t28(hazid);
Select * from
********************************************************************8
外键Foreign key
外键的使用:
外键使用规则?
1.创建外键
create table 库.表(
字段名列表,
foreign key(字段名) referencens 表A(字段名) on update cascade on delete cascade
)engine=innodb;
创建两个表,学费表,班级表,填了学费表cwtab的学生自动更新到班级表bjinfo.
cw_id name pay
学号 姓名 学费
create table cw_tab(
cw_id int primary key auto_increment,
name char(10)not null,
pay float(7,2) not null default 20000
Index(name),
)engine=innodb;
insert into cw_tab(name)values("tom"),("lucy"),("jerry");
select * from cw_tab;
bj_id name class
学号 姓名 班级
create table bjinfo(
bj_id int primary key auto_increment,,
name char(10) not null,
class char(7) not null default "nsd1707",
Index(name),
foreign key(bj_id)
references cw_tab(cw_id)
on update cascade
on delete cascade
)engine=innodb;
desc bjinfo; #查看班级表结构
show create table bjinfo;
2.添加员工信息(学费默认20000,id号自动增长)
Insert into cw_tab(name) values(“liming”);
Insert into cw_tab(name) values(“zhang”);
Insert into cw_tab(name) values(“dong”);
3.验证外键
delete from cw_tab where cw_id=2;
select * from bjinfo;
4.修改成员id 将4号变为8号
update cw_tab set cw_id=8 where cw_id=4;
select * from bjinfo;
删除外键
Show create table bijinfo;
alter table bjinfo drop foreign key bj_id;
* *********************************************************
Show engine;
2.查看数据库可以使用的存储引擎
mysql>show engines;
YES DEFAULT NO
2.1修改数据库默认的存储引擎
vim/etc/my.cnf
[mysql]
default-storage-engine=存储引擎名
wq:
systemctl status mysqld
systemctl restart mysqld
mysql -uroot -pabc123
2.2 查看服务器上已有表使用的存储引擎
mysql>use db3;
mysql>show create table 表名;
2.3 修改服务器上已有表使用的存储引擎
mysql> alter table 表 engine = 存储引擎名;
2.4 键表时指定表使用的存储
mysql -uroot -pabc123
show engines;
create database db3;
desc db3;
use db3;
create table db3.t34(
id int(11)
)engine=innodb;
insert into db3.t31(id) values(201701);
desc t31;
select * from t31;
show create table t31;
3.工作常用的引擎名:myisam innodb
4.
myisam特点;不支持事物;不支持事物回滚 外键 支持表锁
t7.frm t7.MYD t7.MYI
表结构 表记录 索引信息
select name from t7 where name="tom";
innodb特点:支持事物;支持事物回滚 外键;支持行锁
锁的作用:解决多客户端并发访问冲突问题
锁类型:读锁 写锁
锁粒度:行锁 表锁
pc1 update t6 set name="tom" where name= "jim";
pc2 update t6 set name ="lucy" where name="jim";
delete insert update;
在myisam存储引擎会给整张表枷锁(表锁,另一个客户端无法操作此表,当第一个客户端操作完毕释放锁,才可以下一个,突出了并发少的特点)
在innodb存储引擎会给行枷锁(当另一个客户端访问五行(枷锁)之外的行进行读写操作,并发访问量高)
事务?一次sql操作从开始到结束,整个过程称为事务。
ATM机 转账
插卡 622
密码: 123456
表
当读取失败时会读取这个日志文件
事物日志文件:/var/lib/mysql
ib_logfile0 --
---sql命令
ib_logfile1 --
ibdata1 --数据信息
delete from db3.t1 where name="jim"
cd /var/lib/mysql
ls ib
ls -lh ib_logfile*
ls -lh ibdata1
事物特点:原子性 一致性 唯一性 隔离性
关闭自动提交功能 set autocommit=on/off;
开启事务 start transaction;
执行sql操作 insert update delete;
可以回滚rollback
手动执行提交操作commit
第一个终端:
use db3;
create table t6(id int) engine=innodb;
第二个终端:
mysql -uroot -pabc123
show variables like "%commit%";
set autocommit=off;
start transaction;
insert into t6 values(99);
select * from t6;另一个终端select * from t6看不到数据
commit;(提交)另一个终端select * from t6看到数据
5.建表时如何决定表使用的存储?关键看客户端的访问量:人多用innodb,人少用myisam
执行写(insert update delete )操作多的表适合使用innodb存储
执行读(select) 操作多的表适合使用myisam存储
pc2 读 10
pc3 select t6 50
表
create table t9 (id int)engine=innodb;
insert into t9 values(101);
select * frmom db3.t9
systemctl stop mysqld(内存消失)
systemctl start mysqld
索引 类似与 书的目录
查字典:部首笔画 拼音
stuinfo
name sex age class s_year birthday
键值
索引te点:
Index:普通索引: MUL :表可多个index----可重复可null---对象经常作为查询条件
Unique:唯一索引 : UNI :可多个 ;不可重复 允许为null;(当修改为not null,变为主键PRI,但性质不同)
Fulltext;全文索引
Primary key: 主键 : PRI :表只有一个(做唯一标识用)----不可重复不可nul----常与auto_increment连用l; 若多个称为复合主键
Foreign key:外键 使用条件:存储引擎必须是innodb;字段类型一致;被参照字段必须是索引类型的一种(primary key)
************************************
1.Index:
show index from 表名; 查看表中的index
使用: 使用规则 创建 查看 删除
index使用规则?
创建index:
create index 索引名 on 表(字段);
create index abc on t22(name); #在已有表里添加index字段
desc t22;
show index from 表名\G; #查看表中index
drop index 索引名 on 表名;
drop index abc on t22; #删除跳t22表的index
create table 库.表( ##在未有表中创建index
字段列表,
index(字段名),
index(字段名),
index(字段名)
);
create table studb.t24(
name char(10) ,
age tinyint unsigned default 21,
sex enum("boy","girl") not null default "girl",
likes set("film","game","music","it") default "film,game",
index(name),
index(sex)
);
********************************************************
主键的使用:
1.在未有表中创建主键
create table t25(
字段名列表,
primary key(字段名)
);
create table t25(
stu_id char(9),
name char(10),
sex enum("m","w"),
age tinyint(2),
primary key(stu_id)
);
desc t25;
insert into t25 values(null,"tom","m",21);
2.删除主键
alter table 表 drop primary key;
alter table t25 drop primary key;
3.在已有表里添加主键
alter table 表 add primary key(字段名);
alter table t25 add primary key(stu_id);
*****************************************************************
复合主键(多个字段一起做主键)
复合主键字段的值不允许同时相同。
1.在未有表中创建复合主键
create table 库.表(
字段名列表,
primary key(字段名列表)
);
create table t26(
cip varchar(15),
serport smallint,
status enum("deny","allow"),
primary key(cip,serport)
);
insert into t26 values("1.1.1.1",21,"deny");
PRI PRI
cip serport status
1.1.1.1 21 deny
2.1.1.1 21 allow
2.1.1.1 22 deny
2.1.1.1 22 allow
2.删除复合主键
alter table t26 drop primary key;
3.在已有表里添加复合主键。
alter table 表 add primary key(字段名列表);
alter table t26 add primary key(cip,serport);
4.主键通常与 AUTO_INCREMENT 连用,实现字段值的自增长
主键
数值类型 i++ i=i+1
create table t27(
id int primary key auto_increment,
name char(10),
age tinyint ,
sex enum("man","girl"),
class char(7) default "nsd1707"
);
insert into t27(name,age,sex) values("tom",21,"man");
create table t7(
name char(5),
email varchar(10),
age tinyint
);
t1 t2
name name
varchar(4) char(4)
jerry jerry
lucy lucy
jim jim
ab ab
a a
cpu
日期时间类型 nsd1707
select * from t27 where id=2
******************************************888
unique唯一索引
1.在未有表中创建unique字段:
create table t28(
name char(10),
hzid char(5), #对应显示UNI
jsid char(5) not null, #对应显示RPI
unique(hzid),
unique(jsid)
);
insert into t28 values("jim","11111","33333");
UNI
姓名 护照 驾驶证 身份证
JIM null null 111111
2.删除unique 索引
drop index 索引名 on 表;
Drop index hzid on t28;
3.在已有表里添加 unique 索引
create unique index 索引名 on 表(字段名);
Create unique index aaa on t28(hazid);
Select * from
********************************************************************8
外键Foreign key
外键的使用:
外键使用规则?
1.创建外键
create table 库.表(
字段名列表,
foreign key(字段名) referencens 表A(字段名) on update cascade on delete cascade
)engine=innodb;
创建两个表,学费表,班级表,填了学费表cwtab的学生自动更新到班级表bjinfo.
cw_id name pay
学号 姓名 学费
create table cw_tab(
cw_id int primary key auto_increment,
name char(10)not null,
pay float(7,2) not null default 20000
Index(name),
)engine=innodb;
insert into cw_tab(name)values("tom"),("lucy"),("jerry");
select * from cw_tab;
bj_id name class
学号 姓名 班级
create table bjinfo(
bj_id int primary key auto_increment,,
name char(10) not null,
class char(7) not null default "nsd1707",
Index(name),
foreign key(bj_id)
references cw_tab(cw_id)
on update cascade
on delete cascade
)engine=innodb;
desc bjinfo; #查看班级表结构
show create table bjinfo;
2.添加员工信息(学费默认20000,id号自动增长)
Insert into cw_tab(name) values(“liming”);
Insert into cw_tab(name) values(“zhang”);
Insert into cw_tab(name) values(“dong”);
3.验证外键
delete from cw_tab where cw_id=2;
select * from bjinfo;
4.修改成员id 将4号变为8号
update cw_tab set cw_id=8 where cw_id=4;
select * from bjinfo;
删除外键
Show create table bijinfo;
alter table bjinfo drop foreign key bj_id;
* *********************************************************
Show engine;
2.查看数据库可以使用的存储引擎
mysql>show engines;
YES DEFAULT NO
2.1修改数据库默认的存储引擎
vim/etc/my.cnf
[mysql]
default-storage-engine=存储引擎名
wq:
systemctl status mysqld
systemctl restart mysqld
mysql -uroot -pabc123
2.2 查看服务器上已有表使用的存储引擎
mysql>use db3;
mysql>show create table 表名;
2.3 修改服务器上已有表使用的存储引擎
mysql> alter table 表 engine = 存储引擎名;
2.4 键表时指定表使用的存储
mysql -uroot -pabc123
show engines;
create database db3;
desc db3;
use db3;
create table db3.t34(
id int(11)
)engine=innodb;
insert into db3.t31(id) values(201701);
desc t31;
select * from t31;
show create table t31;
3.工作常用的引擎名:myisam innodb
4.
myisam特点;不支持事物;不支持事物回滚 外键 支持表锁
t7.frm t7.MYD t7.MYI
表结构 表记录 索引信息
select name from t7 where name="tom";
innodb特点:支持事物;支持事物回滚 外键;支持行锁
锁的作用:解决多客户端并发访问冲突问题
锁类型:读锁 写锁
锁粒度:行锁 表锁
pc1 update t6 set name="tom" where name= "jim";
pc2 update t6 set name ="lucy" where name="jim";
delete insert update;
在myisam存储引擎会给整张表枷锁(表锁,另一个客户端无法操作此表,当第一个客户端操作完毕释放锁,才可以下一个,突出了并发少的特点)
在innodb存储引擎会给行枷锁(当另一个客户端访问五行(枷锁)之外的行进行读写操作,并发访问量高)
事务?一次sql操作从开始到结束,整个过程称为事务。
ATM机 转账
插卡 622
密码: 123456
表
当读取失败时会读取这个日志文件
事物日志文件:/var/lib/mysql
ib_logfile0 --
---sql命令
ib_logfile1 --
ibdata1 --数据信息
delete from db3.t1 where name="jim"
cd /var/lib/mysql
ls ib
ls -lh ib_logfile*
ls -lh ibdata1
事物特点:原子性 一致性 唯一性 隔离性
关闭自动提交功能 set autocommit=on/off;
开启事务 start transaction;
执行sql操作 insert update delete;
可以回滚rollback
手动执行提交操作commit
第一个终端:
use db3;
create table t6(id int) engine=innodb;
第二个终端:
mysql -uroot -pabc123
show variables like "%commit%";
set autocommit=off;
start transaction;
insert into t6 values(99);
select * from t6;另一个终端select * from t6看不到数据
commit;(提交)另一个终端select * from t6看到数据
5.建表时如何决定表使用的存储?关键看客户端的访问量:人多用innodb,人少用myisam
执行写(insert update delete )操作多的表适合使用innodb存储
执行读(select) 操作多的表适合使用myisam存储
pc2 读 10
pc3 select t6 50
表
create table t9 (id int)engine=innodb;
insert into t9 values(101);
select * frmom db3.t9
systemctl stop mysqld(内存消失)
systemctl start mysqld
相关文章推荐
- mysql系列之2------数据类型,索引,键,存储引擎
- mysql中常见的存储引擎和索引类型
- mysql的存储引擎类型和索引类型
- 02: MySQL 索引类型 、 MySQL 存储引擎
- mysql(二)存储引擎和数据类型
- 浅谈MySql的存储引擎(表类型)
- MySQL将某个数据库下的所有表的存储引擎修改为InnoDB类型语句
- MySQL存储引擎与数据类型
- [小白技巧]如何在Linux上检查MySQL数据表的存储引擎类型
- 【MySQL】MySQL存储引擎以及索引
- Python--MySql(主键的创建方式、存储引擎、存储过程、索引、pymsql)
- 浅谈MySql的存储引擎(表类型)
- Mysql学习总结(4)——MySql基础知识、存储引擎与常用数据类型
- 浅谈MySql的存储引擎(表类型)
- 浅谈MySql的存储引擎(表类型)
- 浅谈MySql的存储引擎(表类型)
- mysql 索引注意事项:表存储引擎的选择
- mysql存储引擎类型及存储引擎的选择
- MySQL里建立索引应该考虑数据库引擎的类型
- 浅谈MySql的存储引擎(表类型)