Mysql数据库学习总结【3】

Mysql数据库学习总结【3】

1、索引
1、定义 :对数据表的一列或者多列的值进行排序的一种结构(BTree)
2、优点 :加快数据检索速度
3、缺点
1、占用物理存储空间
2、当对表中数据更新时,索引需要动态维护,降低数据维护速度
2、索引分类
1、普通索引(index)、唯一索引(unique)使用规则
1、可创建多个字段
2、普通索引无约束,唯一索引要求字段值不允许重复,但可为NULL
3、KEY标志 :普通(MUL) 唯一(UNI)
4、经常用查询的字段、where后、order by排序字段创建索引
2、创建
普通(MUL)、唯一(UNI,字段值不重复,但可为NULL)
1、创建表时创建
create table 表名(
id int,
name varchar(20),
phnum bigint,
index(name),
unique(phnum)
)charset=utf8;
2、已有表中创建
create index 索引名 on 表名(字段名);
create unique index 索引名 on 表名(字段名);
3、查看
1、desc 表名; --> KEY标志
2、show index from 表名\G;
4、删除
drop index 索引名 on 表名;


1、主键(primary key)&&自增长属性(auto_increment)
1、使用规则
1、一张表中只能有1个主键字段
2、约束 :字段值不允许重复,且不能为NULL
3、KEY标志 :PRI
4、通常设置记录编号的字段id为主键,能够唯一锁定1条记录
2、创建表时创建,并指定自增长起始值
create table 表名(
id int primary key auto_increment,
name varchar(20)
)auto_increment=10000,charset=utf8;
## 已有表中重新指定起始值
alter table 表名 auto_increment=20000;
3、已有表中添加主键
alter table 表名 add primary key(id);
4、删除
1、删除自增长属性(modify)
alter table 表名 modify id int;
2、删除主键
alter table 表名 drop primary key;
2、外键(foreign key)
1、定义 :让当前表字段值在另一个表的范围内选择
2、语法
foreign key(从表字段名)
references 主表(主表字段名)
on delete 级联动作
on update 级联动作
3、使用规则
1、主表、从表字段数据类型要一致
2、主表被参考字段 :主键
总结
1、主键:
若某一个属性组(注意是组)能唯一标识一条记录,该属性组就是一个主键。主键不能重复,且只能有一个,也不允许为空。定义主键主要是为了维护关系数据库的完整性。

2、外键:
外键用于与另一张表的关联,是能确定另一张表记录的字段。外键是另一个表的主键,可以重复,可以有多个,也可以是空值。定义外键主要是为了保持数据的一致性。

3、索引:
索引是对表中一个或多个列的值进行排序的结构。

  1. 应该创建索引的列的特点:
    ① 在经常需要搜索的列上创建索引,可以加快搜索的速度;
    ② 在作为主键的列上创建索引,强制该列的唯一性;
    ③ 在经常用在连接的列上创建索引,主要是一些外键,可以加快连接的速度;
    ④ 在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的;在经常需要排序的列上创建索引,因为索引已经排序,可以利用索引的排序加快查询;
    ⑤ 在经常使用在where子句中的列上创建索引,加快条件的判断速度。

  2. 不应该创建索引的列的特点:
    ① 在查询中很少使用的列上不应该创建索引,因为这些列很少使用到,因此有索引或无索引,并不能提高查询速度,相反由于增加了索引,反而降低了系统维护速度,增大了空间需求;
    ② 在只有很少数据值的列上不应该创建索引,很少数据值的列如性别等,在查询的结果中,结果集的数据行占了表中数据行的很大比例,即需要在表中搜索的数据行的比例很大,增加索引,并不能明显加快检索速度;
    ③ 当修改性能远远大于检索性能时,不应该创建索引,因为改性能和检索性能是互相矛盾的,当增加索引时,会提高检索性能,但会降低修改性能,当减少索引时,会提高修改性能,但会降低检索性能。因此,当修改性能远大于检索性能时,不应该创建索引。

  3. 可以在数据库设计器中创建三种索引:
    ① 唯一索引:
    不允许其中任何两行具有相同索引值的索引。
    ② 主键索引:
    表的某一列或列组合,其值唯一标识表中的每一行,该列或列组合称为表的主键。为表定义主键将自动创建主键索引,主键索引是唯一索引的特定类型。该索引要求主键中的每个值都唯一。
    ③ 聚集索引:
    ①聚集索引:聚集索引表示表中存储的数据按照索引的顺序存储。由于聚集索引规定数据在表中的物理存储顺序,因此一个表只能包含一个聚集索引。
    ②聚集索引实例:字典默认按字母顺序排序,如知道某个字的读音可根据字母顺序快速定位。
    ③非聚集索引:非聚集索引表示数据存储在一个地方,索引存储在另一个地方,索引带有指针指向数据的存储位置,需要查询两个地方才能查找到数据。一个表可以包含多个非聚集索引,可以为查找数据时常用的每个列创建一个非聚集索引。
    4、主键和外键的关系:
    外键是另一个表的主键,主键是可以被外键有效引用的对象。若A表中的一个字段,是B表的主键,则它可以是A表的外键。


1、级联动作
1、cascade :数据级联删除、更新(参考字段)
2、set null:主表更新、删除时,从表相关联记录该字段值设置为NULL
3、restrict:从表有相关联记录,不允许主表操作
2、删除外键
show create table 表名;
alter table 表名 drop foreign key 外键名;
3、在已有表中添加外键
alter table 从表 add foreign key(stuid) references 主表(id)
on delete 级联动作
on update 级联动作
4、锁 :目的是解决客户端并发访问的冲突问题
1、锁类型分类
1、读锁(共享锁)
select:加读锁后别人不能更改表记录,但可查询
2、写锁(互斥锁、排他锁)
update:加写锁后别人不能查询,不能改
2、锁粒度
1、行级锁 :Innodb
可以加读锁、写锁
2、表级锁 :MyISAM
可以加读锁、写锁
5、存储引擎(处理表的处理)
1、基本操作
1、查看所有的存储引擎
mysql>show engines;
2、查看已有表的存储引擎
mysql>show create table 表名;
3、创建表时指定存储引擎
mysql>create table 表名(…)engine=MyISAM
4、已有表
mysql>alter table 表名 engine=InnoDB;
2、InnoDB特点
1、支持行级锁、外键
2、支持事务、事务回滚
3、共享表空间
表名.frm :表结构和索引信息
表名.ibd :表记录
3、MyISAM特点
1、支持表级锁
2、独享表空间
表名.frm :表结构
表名.myd :表记录
表名.myi :索引文件
4、MEMORY特点
1、表结构在硬盘中,表记录在内存中
2、服务重启或主机重启后,表记录消失
5、如何决定使用哪个存储引擎
1、执行查询操作多的表 :MyISAM(使用InnoDB浪费资源)
2、执行写操作多的表 :InnoDB

猜你喜欢

转载自blog.csdn.net/weixin_43760712/article/details/86552238