成都10期-陈钱 发表于 2021-11-26 19:57:59

索引、视图、存储

第十四天学习笔记
索引、视图、存储
索引:用index表示
1、索引是一种数据结构,通过搜索索引找到特定的值
2、作用:利用索引快速访问数据库中的信息
3、分类:普通索引、唯一索引、主键索引
创建普通索引:单个字段创建索引
create index aa on student(math);
查看索引:show index from student:
多个字段创建索引:create index cc on student(math,age);
删除索引:alter table student drop index cc;
唯一索引:字段对应的值是唯一的,不允许有重复
create unique index cc on student math;
主键索引:有主键约束绑在一起,有主键约束,必会产生主键约束,要先删除自增长,再删除原有的主键约束
create table student add peimary key(math);
视图:在基础表中筛选部分字段作为视图表,保护一些基础表的隐私性,是一个虚拟表,不在数据库以存储数据的形式保存,使用视图的时候动态生成。
数据库视图:view
创建视图:create view dcs as(select id,calsss,math from student);
查看视图结构:show create view dcs;
查看表中包含的视图表:show tables;
查看视图表数据:select *from 视图表名;
注意:视图表的增删改查会根据基础表的变化同时变化
DDL//数据库定义语言(对表结构和表字段进行操作)
DML//数据库操作语言(对表数据进行操作)
insert into       delete       select      update
主键约束、非空约束、自增长约束、默认值约束(主要约束表的字段)
外键约束:foreign,约束的是表与表之间的关系,保持数据的一致性,完整性
创建一个dcs1表:create table dcs1(id int(4) primary key,name varchar(10))engine=innode;
创建一个dcs2表:create table dcs2(sid int(4) peimary key,sname varchar(10),constraint dcs foreign key(sid)references dcs1(id))engine=innode;
对表2的命令解释:
dcs1—主表      dcs2—子表
constraint dcs:约束,外键约束名称叫dcs
foreign key(sid):创建在dcs2表的sid字段上面
references dcs1(id):引用和参考的是dcs1表的ID字段
engine=innode:数据库存储引擎为innode,myisam引擎对外键不起作用
显示表结构:show create table dcs1;    show create table dcs2;
往表里插入数据:insert into dcs1 values(1,'xiaoyi'),(2,'xiaoer');
                           insert into dcs2 values(1,'xiao1'),(2,'xiao2');
注意:在子表中插入的数据必须在主表中存在,只针对于有关联的两个字段,主表中不存在的数据,在任何子表中无法插入与之相关的数据,主表和子表的两个相关连的字段名不能相同,相关联的两个字段要有主键约束,否则创建会失败。
删除表中的数据:delete from dcs1 where id=1;
直接删除主表的数据删除不掉,要先删除子表的数据
delete from dcs2 where sid=1;
删除外键,使不存在约束:alter table dcs2 drop foreign key dcs;
创建外键:alter table dcs2 add constraint dcs foreign key(sid) references dcs1(sid);
存储过程:=sql语句集合+控制语句
drop procedure if exists dcs;#增强健壮性,如果dcs这个存储过程存在则删除
create procedure dcs(n int)#创建一个存储过程,dcs是名字,n就是形式数,                        
                                             int是整数类型
begin                                 #存储过程的开始
        declare i int(20) default(select count(*) from mm);#declare定义一个变量,
        declare j int(20) default(select max(score) from mm);#定义变量j,默认为   
                                                 最高分数
      drop table if exists mm;   #当mm这个表存在,则先删除mm表
        create table mm(id int(10) primary key auto_increment,score int(10));
        insert into mm values(1,99),(2,78),(3,96),(4,88),(5,79),(6,82),(7,92),(8,57);


/*if n=0 then          #if单分支
        select count(*) from mm;
   else
        select max(score) from mm;
        end if;
        select * from mm where id=1;#不带参数进行增删改操作
        select * from mm where id=n;#带参数进行查询
        select * from mm;


if n=0 then      #if多分支
        select count(*) from mm;
else if n>0 && n<8 then
        select max(score) from mm;
else if n>8 then
        select * from mm order by score desc;
else
        select * from mm;
        end if;
        end if;
        end if;
       
if n=0 then      #if外循环
                select count(*) from mm;
        else if n>0 && n<i then
                select max(score) from mm;
        else
                while n>i do
                        set j=j+1;
                        insert into mm(score)values(j);
                        set i=i+1;
                end while;
        end if;
        end if;
        select * from mm;
end            #存储过程结束
call dcs(8)#调用dcs()结束注意:创建跟调用不能同时选中执行,先执行创建再调用,假如设置了形式参数,调用时必须要传入实际参数


页: [1]
查看完整版本: 索引、视图、存储