找回密码
 立即注册

推荐阅读

  • 便民服务
  • 关注我们
  • 社区新手
外键约束
主要作用:保持数据的一致性,完整性
创建外键关联表和表:primary key 主键(外键需要有主键约束)
engine=innodb-----创建外键或者事物的时候
主表
create table dcs1(id int(4)primary key,name char(4)) engine=innodb; 给dcs1创建了一个外键约束
基于主表来创建子表(子表关联主表)
constraint--创建当前外键的别名
constraint fk_sid---fk是外键名,sid是对应dcs2表中的字段
constraint  aa(此语法的作用就是来定义一个外键名称,后续要解除外键关系可以通过删除掉这个名称来解除)
foreign key(sid)  设置外键约束:dcs2中的sid
references dcs1(id) 和dcs1 中的id关联,dcs1为主,dcs2为子
create table dcs2(sid int(4)primary key,score int(10),constraint aa foreign key(sid)references dcs1(id)) engine=innodb;给dcs2子表创建一个外键,外键名字叫aa并且子表的外键字段为sid,对应主表的主键名字是id。
删除外键:alter table 子表名 drop foreign key 外键名
                eg:alter table dcs2 drop foreign key aa;外键名
当前创建后:dcs1 和dcs2是外键关系。其中dcs1是主,dcs2是子
注意:1、主表中有数据,子表才能拥有数据
            2、主表中有多少行的数据,子表才能有对应行的数据,且不能超过主表的数据
           3、如果要删除主表的数据,必须要先删除子表的数据(delete from 来删除数据)删除的数据序列要对应,假如子表删除的是第二行数据,主表也是要对应第二行数据
           4、如果要删除主表,必须要先删除子表(drop table+表名)
如果不起别名的话,后续删外键约束只能删除子表才行,起了别名直接删掉外键约束别名即可。

数据库视图====保护数据的敏感信息
create view yy as (select id,name from dcs); 此处的as相当于copy的意思,yy是新创建的试图别名
dcs表
id,name    score   age   sex
视图表:yy
id   name
//将查询结果集创建为视图yy
show create view yy
//也能查看到视图  show tables 查看视图
drop view 视图名;删除视图
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\f05d51384299429d82a54a8de614fc31\)~i7rq55r`vwzakqy9(3{el.png
视图:view
1、对视图的操作与对基本表的操作都是一样的(包括alter,create,insert into,update,delete,select),
2、二者任意一方的字段值被修改,都会实时影响到对方(如修改view的字段值,会同步修改table相应的字段值);
3、视图的创建是基于基本表的,他的作用可以对基本表的敏感信息进行保护,在实际工作中,出于安全考虑,将用户常用的信息创建成视图给用户调用,避免了直接操作基本表。


存储过程:创建大量的数据,用这个数据进行相关的测试,简称:造数据
测试岗位使用频率也不是很高,开发使用的比较多,一个存储代码写好后是可以给其他同事调用的

第一:了解存储的基本架构
create procedure  +存储的名称()
begin        开始
    代码块
end            结束
call 存储的名称()  

第二:写一个示例
eg:
create procedure dcs()                                                           #创建一个存储名称是dcs      
begin                                                                                       #开始运行
  create table duoceshi(id int(4)primary key,score int(4));        #代码块
  insert into duoceshi(id,score)values(1,22),(2,33),(3,44);        
  select * from duoceshi;
end                                                                                          #结束
call dcs();                                                                                 #调用dcs这个存储
调用是跟上面分开的,先运行开始到结尾的,然后再运行调用。只能调用一次,调用二次会报错
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\c68162106cbc42e3a00342303c5a3f1b\(8dx~7}8%7nlfjt6b@1lg(m.png
第三:解决限制只能调用执行一次,增强代码的容错率和健壮性

drop procedure if exists dcs;                                                         #增强代码的容错率和健壮性
create procedure dcs()                                                                  #创建一个存储
begin                                                                                              #开始
  drop table if exists duoceshi;                                                        #如果存在则删除,不存在则不删除正常建立
  create table duoceshi(id int(4)primary key,score int(4));
  insert into duoceshi(id,score)values(1,22),(2,33),(3,44);
  select * from duoceshi;
end                                                                                                 #结束
call dcs();                                                                                        #调用存储
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\38fda75e75164464a7f0afedc60212ee\clipboard.png

第四:了解形参和实参,还有做增删改的相关操作
drop procedure if exists dcs;                                                          #增强代码的容错率和健壮性
create procedure dcs(n int)                                                             #创建存储定义一个形参n 类型是整形
begin                                                                                               #开始
  drop table if exists duoceshi;
  create table duoceshi(id int(4)primary key,score int(4));
  insert into duoceshi(id,score)values(1,22),(2,33),(3,44);
  select * from duoceshi where id=n;
  select * from duoceshi where id=1;                                               #查询
  update duoceshi set score=100 where id=1;                                 #修改
  delete from duoceshi where id=1;                                                  #删除
end                                                                                                  #结束
call dcs(1);                                                                                        #调用
在call括号里面填进赋予的值,写几调用后就会显示第几行的数据
形参是设定在dcs存储中的,那么通过call调用dcs的时候一定要赋予一个对应形参的对应的实参,且只能赋予一个值(实参)
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\63b1236c894348d9a642b730c96831e5\clipboard.png

C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\0f2b2bdba3cf4f30b767cebd828f322c\clipboard.png

第五:if 的判断
drop procedure if exists dcs;                                                            #增强代码的容错率和健壮性
create procedure dcs(n int)                                                              #创建存储定义一个形参n 类型是整形
begin                                                                                                 #开始
  drop table if exists duoceshi;
  create table duoceshi(id int(4)primary key,score int(4));
  insert into duoceshi(id,score)values(1,22),(2,33),(3,44);
  if n=0 then                                                                                         #如果条件满足则执行查询所有
     select * from duoceshi;
  else                                                                                                   #不满足否则查询求最小分数
     select min(score)from duoceshi;
end if;                                                                                                  #结束if判断
end                                                                                                      #结束
call dcs(1)                                                                                             #调用
一个if要对应一个end if
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\7f31da0e9c404fb2a84945aa4efa7ea1\clipboard.png
补充上图中内容,因为1大于0 所以查询了最小的值
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\5e2ae8c9fa204a8baad1f0f8e34cdc3d\clipboard.png
第六:if的多分支判断
drop procedure if exists dcs;                                                            #增强代码的容错率和健壮性
create procedure dcs(n int)                                                              #创建存储定义一个形参n 类型是整形
begin                                                                                                 #开始
  drop table if exists duoceshi;
  create table duoceshi(id int(4)primary key,score int(4));
  insert into duoceshi(id,score)values(1,22),(2,33),(3,44);
  if n=0 then                                                                                         #如果条件满足则执行查询所有
     select * from duoceshi;
  else if n >1 then         
     select * from duoceshi where id=3;
  else                                                                                       
     select min(score)from duoceshi;
end if;                                                                                                  #结束if判断
end if;
end                                                                                                      #结束
call dcs(2)                                                                                             #调用
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\147dec3ef6af46c3b05879c5a6cd7cd8\clipboard.png

C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\9d4a73819bae4158b7eb4dd194727bb1\clipboard.png

第七:设置变量和while循环语句
drop procedure if exists dcs;                                                            #增强代码的容错率和健壮性
create procedure dcs(n int)                                                              #创建存储定义一个形参n 类型是整形
begin                                                                                                 #开始
  declare i int default 1;                                                                      #设置一个变量i 整形给变量赋予值1
  declare j int default (select min(score)from duoceshi);
  drop table if exists duoceshi;
  create table duoceshi(id int(4)primary key auto_increment,score int(4));
  while n>=i do                                                                                  #条件满足进入循环体
            n=10  i=1
            10>=1  1+1=2 1+2=3  ......i=11
             10>=11  10并不是大于11 所以数据只会取值到第10行
      insert into duoceshi(score)values(i);
  set i=i+1;
  end while;                                                                                         #结束
      select * from duoceshi;               
end                                                                                                      #结束
call dcs(10)                                                                                             #调用

如果满足数据就会一直往这个表中增加数据;while循环如果条件满足进入循环体,不满足退出循环体,一直满足一直循环(死循环)
C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\dda791d111bb449a9f6a860b65a1c0d7\cowvg`w}4$(_xfmz0tinwpb.png

C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\eb5fdb419a954ab4adafda66bb99060e\clipboard.png

C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\9ef7f9c0316e4bbd9fdb126c41e33700\rt9c$v2fpo`jthjk61st~ma.png
死循环语句--如果条件满足就一直循环,进入死循环

drop procedure if exists dcs;                                                            #增强代码的容错率和健壮性
create procedure dcs(n int)                                                              #创建存储定义一个形参n 类型是整形
begin                                                                                                 #开始
  declare i int default 1;                                                                      #设置一个变量i 整形给变量赋予值1
  declare j int default (select min(score)from duoceshi);
  drop table if exists duoceshi;
  create table duoceshi(id int(4)primary key auto_increment,score int(4));
  where n>=1 do                                                                                  #条件满足进入循环体
             n=2    i=1
             2>=1
      insert into duoceshi(score)values(i);
  end while;                                                                                         #结束
      select * from duoceshi;               
end                                                                                                      #结束
call dcs(2)                                                                                             #调用    当前的执行是一个死循环

C:\Users\Administrator\AppData\Local\YNote\data\weixinobU7Vjr0tg5K6BKLpBh0jEhjgoPw\8b2e345d291b4f18ac6f21c714512119\clipboard.png


分享至 : QQ空间
收藏

0 个回复

您需要登录后才可以回帖 登录 | 立即注册