外键约束
主要作用:保持数据的一致性,完整性
创建外键关联表和表: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
|
|