广州37期_罗子鹏 发表于 2021-12-18 19:08:27

第十二天笔记

索引 index
作用:通过索引可以提高数据库中查询数据的速度,优化查询学性能
一般是对某一些常用的字段加索引,不能对一张表所有字段都加索引,如果都加就没有了提高查询性能的意义,反而会影响系统的性能(内存占用率、磁盘读写速度)

注意:
1.创建索引是在大量数据的前提下,添加索引之后查询速度明显提示
2.不是表中的每个字段都要添加索引,如果每个字段都添加索引,就没有实际意义,就算添加了也会消耗大量的内存,通常情况下我们只是对一些热字段(经常要查询的字段)添加索引
3.索引的优先:PRI>UNI>MUL

索引的类型有3种
普通索引index:
表中的字段是可以创建多个索引,没有对字段中值任何要求

唯一索引unique、index:
也是可以创建多个,要求是唯一索引的值不能重复,允许为空

主键索引primary、key:
一个表只能有一个主键索引,要求是对应的值不能重复,不能为空

show index from grade;展示索引情况来自于grade表

创建索引:
1.普通索引 create index 语句创建
给单个字段创建普通索引:
create index aa on grade(class); 创建普通索引aa在grade表中class字段上
show index from grade;展示索引情况来自于grade表
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjt-AmHOlU63ZT0giGOqKtns\44d84d63cf9442439ffb2b1e9fe84331\clipboard.png
给多个字段创建普通索引---联合索引
create index bb on grade(age,math,name);
创建普通索引bb在grade表的age,math,name字段上

删除普通索引:
alter table grade drop index bb;
修改grade表,丢弃索引bb

2.唯一索引:create unique index
字段中存在重复的值,就不能把唯一索引创建在该字段上
(1)第一种
create unique index unbb on grade(name);
创建唯一索引uubb在grade表的name字段上

(2)第二种
alter table grade add unique index ff(age,math);
修改grade表,添加唯一索引ff在age和math字段上

删除唯一索引--和删除普通索引是一样的;
alter table grade drop index ff;
修改表grade丢弃索引ff
alter table grade drop index aa,drop index uubb;

3.主键索引
在创建主键约束是,主键索引就同时创建成功
主键索引和主键约束是绑定在一起的,主键约束其实就是主键索引的一种特征
删除主键索引
desc grade;
alter table grade modify sid int(4);
删除自然增长
alter table grade drop primary key;
删除主键索引(主键约束)
show index from grade;


视图 view;
视图是由数据库里面的本身存在着的数据,通过某些SQL加工处理的虚拟表
视图(虚拟表)是关联着基础表(实绩表)
视图是一个虚拟的表,是有行和列组成的数据,但是本身并不是存储数据,只是做展示数据
视图是有基础表动态生产的

一、视图的作用,为什么要使用视图?
1.为了安全,有些字段为了保密,那么就可以创建视图,创建视图可以限制用户对基础班的某些敏感信息的查询
2.为了方便,有时数据库中的一些查询比较复杂,编写的SQL语句又复杂又要经常重复使用,为了避免每次写SQL的出错,可以创建视图,方便我们自己使用,提高查询效率

二、视图的操作特点
1.视图的操作和基础表的操作基本是一样的,也是可以用create,alter,insert into等
2.视图的创建和删除是不影响基础表,基础表的创建和删除影响视图
3.视图和基础表中的数据修改是互相影响的

三、视图的缺点
1.性能差,因为查询视图时,一条看着简单的SQL查询,可能要对基础表进行复杂的查询
2.修改限制,对视图的数据修改,如果关联着比较多的基础表,那么就可能修改异常修改失败,对应复杂的视图是不允许修改的

四、创建视图,可以理解为对基础表的数据进行复制
select * from grade;
create view dcs as(select name,chinese,english,math from grade);
创建一个包含grade表name,chinese,english,math的视图

show tables;
show create view dcs;查看视图dcs的结构

select * from dcs;查看视图表中的数据,也是使用select语句执行

update dcs set math=120 where name='lisi';对视图dcs进行数据修改

delete from grade where sid=1;删除基础表grade表中的数据

create view deptemp as(select * from dept left join emp on dept.dept1=emp.dept2);

drop view 视图;删除视图

showtable status where comment='view'; 查看有哪些是视图

主键约束
非空约束——not null
默认值约束——default
自增长约束

外键约束 也叫做外码 foreign key
约束的是表和表之间的关系
主要作业:保持数据的一致性、完整性
注意:外键约束只支持数据引擎为innodb的表
         没有指定数据引擎,默认是myisam
         engine=innodb

1.创建两张表 dcs1、dcs2
现在创建两张表 dcs1,dcs2
设计时给dcs2的sid字段关联着dcs1表的id字段,加入外键约束
dcs1就变成了主表,dcs2就是从表

2.先创建主表dcs1
create table dcs1(id int(4) primary key,name varchar(10)) engine=innodb;

3.创建从表dcs2,要在从表上指定的字段关联主表的字段,关联后就存在外键约束
create table dcs2(sid int(4) primary key,sname varchar(10),constraint dcs foreign key(sid) references dcs1(id)) engine=innodb;
创建表dcs2包含字段sid类型为int(4)主键约束,字段sname类型为varchar(10),创建约束,名为dcs外键定义在sid字段上,引用(来源于)dcs1表的id字段,数据引擎为innodb

dcs2==》从表
constraint dcs ==》约束名称为dcs
foreign key(sid)==》外键定义在本表的sid字段上
references dcs1(id)==》引用的是dcs1表的id字段

往主表和从表分别插入数据
1.往主表插入
insert into dcs1 values(1,'xiaomai'),(2,'damai');
可以任意正常的插入数据
select * from dcs1;
2.往从表插入数据
insert into dcs2 values(1,'66');
正常的插入数据,因为sid关联的dcs1表中id字段有值为1,所以可以插入sid=1的数据

insert into dcs2 values(3,'gg');
异常的失败,因为关联的dcs1表中没有id=3,所以dcs2无法插入sid=3,没法关联主表,所以报错

对主表和从表进行数据删除
1.对主表删除数据
delete from dcs1 where id=1;
报错,因为从表有一个sid=1引用着主表的id=1的数据,所以主表不能直接删除该数据,需要先删除从表引用的数据

delete from dcs1 where id=2;
成功,因为id=2没有被其他表引用着
select *from dcs1;

2.对从表进行删除数据
delete from dcs2 where sid=1;
从表的数据可以直接删除,删除从表数据后就可以删除主表的对应数据

结论:
1.对子表进行数据插入时,需要现在主表定义对应的数据,否则报错
2.删除主表数据时,要确认从表是否有引用,如果从表引用着,要先删除从表的数据
3.如果要更新主表过着从表的数据时,要先把从表的数据进行删除,然后改主表数据,接着再重新插入从表的数据进行更新

删除外键==》删除后,可以不受约束去操作主表和从表
alter tables +从表的表名 drop foreign key +外键名称;

修改表的数据引擎:
alter table 表名 engine=innodb

页: [1]
查看完整版本: 第十二天笔记