广州30班-黄苑春 发表于 2021-6-13 23:18:44

6月13索引、视图、外键约束

6月13日笔记 数据库的索引:index一般是添加一张表中某些频繁使用的字段上,添加索引的意义是在于提高数据查询的速度,不能对整一张表所有的字段都加索引。 注意:1,创建索引是在大量的数据前提下去做,添加索引之后查询速度明显可以提高2,不是每个表的字段都需要加索引,每个字段都索引就没有了实际的意义了,即使是添加了也会消耗系统的大量内存,通常之后对经常使用的字段进行添加索引3,索引的优先级:PRI>UNI>MUL,,,主键>唯一>普通 索引分3种:普通索引 index MUL:一张表中可以创建多个普通索引唯一索引 unique index UNI :也可以创建多个唯一索引,要求添加唯一索引的列不能存在重复的值主键索引 primary PRI:在定义主键约束时,同时也是对该字段定义一个主键索引,主键索引是主键约束一个特征,不能为空不能重复 创建普通索引:create index aa on grade(name); -- 创建普通索引aa在 grade表的name字段desc grade;file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml15940\wps1.jpg show index from grade;-- 展示索引 来源 grade表file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml15940\wps2.jpg alter table grade drop index aa; -- 修改表 grade 删除索引 aa;file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml15940\wps3.jpg create index aa on grade(age); -- 给多个字段创建普通索引file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml15940\wps4.jpg 创建唯一索引:create unique index cc on grade(name);-- 创建 唯一索引 cc 在 grade表的name字段desc grade;show index from grade;-- 展示索引 来源 grade表file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml15940\wps5.jpg file:///C:\Users\ADMINI~1\AppData\Local\Temp\ksohtml15940\wps6.jpg create unique index ff on grade(class); -- 执行报错,因为class字段存在重复的值,所以不能添加唯一索引 select *from gradeinsert into grade(name) values('lisi'); -- 执行报错,因为name字段已经被定义了唯一索引,所以导致插入数据时,重复数据不允许被插入 alter table grade drop index cc;-- 删除唯一索引和删除普通索引的方式是一样的 alter table grade drop index aa,drop index cc;-- 同时删除多个索引(普通索引或者唯一索引) 创建主键索引 :alter table grade add primary key(sid); -- 修改表 grade表 增加主键在sid字段上 删除主键:alter table grede drop primary key; -- 删除主键(如果有自增长,需要先删除自增长) 视图 view:视图是一张基于实体表的虚表,这个实体表也叫实体的基础表,视图的数据时基于实体表,两者之间数据的改变都会影响到对方为什么要使用视图?因为数据库中有些查询是非常复杂的,而且这些查询是经常使用,所有可以使用视图直接查看这些频繁使用的查询语句;另外还有出于安全的考虑,一些数据的脱敏处理(防止一些敏感信息的暴露) 视图的缺点:1,性能差,因为视图是由其他表的select语句生成,对视图进行操作时其实是进行了两次操作,先是对视图进行操作,然后视图也会对基础表进行操作2,存在修改限制,对结构简单视图是很方便操作,但是对结构复杂(生成视图的SQL复杂)的视图,是不允许进行修改 select * from grade;创建视图:create view dcs as(select sid,name from grade);show tables;show create view dcs; -- 查看dcs视图的创建方式 查看视图的结构 /* CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`%` SQL SECURITY DEFINER VIEW `dcs` AS (select `grade`.`sid` AS `sid`,`grade`.`name` AS `name` from `grade`)这是通过查看视图结构获取的结果*/ showtable status where comment='view';-- 展示表的状态,当类型是视图的 对视图进行操作:select *from dcs;update dcs set name='lisan' where sid=2;insert into dcs(name) values('xiaomai');delete from dcs where sid =1; 对多表查询定义为一个视图create view join1 as (select * from emp,dept where emp.dept2=dept.dept1); select *from join1; 删除视图:drop view dcs;   -- 删除视图 dcs视图 表内约束:主键约束:不能为空,不能重复,是唯一的非空约束:不能为空自增长约束:通常是结合主键约束一起使用的,在插入数据的时候,不对定义了自增长约束的字段进行数据插入,会直接的在该字段最大的值进行+1插入默认值约束:对列值定义一个默认值,在不对默认约束的列插入数据时,会直接插入一个默认值 外键约束 也叫外码(foreign key):约束的是表与表之间的关系主要作用:保持数据的一致性、完整性 1,创建两个表dcs1、dcs2,设计时,给dcs1表加入一个外键,这个外键加在dcs2的sid字段上 创建主表dcs1:create table dcs1(id int(4) primary key,name varchar(10)) engine=innodb; 创建从表dcs2:create table dcs2(sid int(4) primary key,sname varchar(10),constraint fk_sid foreign key(sid) references dcs1(id)) engine=innodb;-- 创建表 dcs2 包含字段 sid 类型为int(4) 主键,sname 类型为varchar(10), 创建约束 命名为fk_sid 外键定义在sid字段上,引用dcs1表中的id字段,数据引擎为innodb 解释:dcs1 ==>主表(父表)dcs2 ==>从表(子表)constraint fk_sid :约束的名称为 fk_sidforeign key(sid) :外键定义在sid字段上references dcs1(id):引用的是dcs1表的id字段engine=innodb :在mysql建表,默认的数据引擎是MyISAM,在使用外键的表都要使用innodb的数据引擎类型 插入数据:只能先对父表进行数据插入,才可以对子表进行对应的数据插入insert into dcs1 values(1,'马桶盖');-- 这是父表insert into dcs2 values(1,'马桶');   -- 这是子表 select *from dcs1;select *from dcs2; 删除数据:只能先对子表进行删除,才可以对父表的对应数据进行删除delete from dcs2 where sid=1;-- 这是子表 delete from dcs1 where id=1;   -- 这是父表 注意:外键约束中,父表和子表的外键是互相影响的,子表存在的数据不能再父表直接删除;父表不存在的数据,不能在子表进行增加;父表和子表的数据更新需要关注对方表是否存在这 删除外键:alter table dcs2 drop foreign key fk_sid; -- 修改表 dcs2 删除外键 fk_sid删除外键之后,就可以不再受约束的去操作父表和子表 添加外键约束:alter table dcs2 add constraint fk_sid foreign key(sid) references dcs1(id);添加外键约束需要注意的三点:1,需要关注添加外键约束的子表和父表的数据是否都存在关联关系2,需要关注子表和父表的数据引擎是否为innodb3,定义外键名的时候,不需要加引号
页: [1]
查看完整版本: 6月13索引、视图、外键约束