请选择 进入手机版 | 继续访问电脑版
 找回密码
 立即注册
  • 便民服务
  • 关注我们
  • 社区新手
视图: 起到保护表的作用
show tables;
select * from student;
create view asd as(select id,name,math from student);
根据student表创建视图,dcs为视图名字,比如我只想把这三个字段暴露出去:
show tables; 查看视图
select * from dcs; 查看创建了视图的这个虚拟表,给这三个字段创建了视图
show create view dcs;查看视图的结构

delete from dcs where id=10;
删除视图里面的数据,然后分别查询视图表和原表的数据,同步被删除
update dcs set math=100 where id=1;
update student set math=99 where id=1;
分别改视图表和原表的数据,验证数据同步被修改
drop view dcs;
show create view dcs;  查看创建视图的结构,报不存在的视图表

外键约束:
1.主键约束 primary key
2.非空约束 not null
3.自增长约束 auto_increment
4.默认值约束 default
总结: 这里的4个约束,主要是约束表的字段

外键约束 foreign key 约束的是表与表之间的关系
create table duo1(id int(4) primary key,name varchar(10)) engine=innodb;  这是主表
create table duo2(sid int(4) primary key,sname varchar(10),constraint dcs foreign key
(sid) references duo1(id)) engine=innodb; 这是子表
给duo1创建一个名称为dcs的外键约束在duo2的sid字段
duo1 主表
duo2 子表
constraint dcs :约束    外键约束的名称叫dcs
foreign key (sid): 创建在duo2表的sid字段上
references duo1(id) :引用和参考的是duo1表的id字段
engine=innodb :数据库的存储引擎为innodb
如果不指定引擎,默认使用mysam,使用的这个默认引擎不起作用
show engines; 查看mysql 数据库所有引擎。

#插入数据
insert into duo1 values(1,'xiaoyi'),(2,'xiaoer');
插入数据只能插入相关的数据,没有关联的数据的插入不了
insert into duo2 values(1,'xiaosan'),(2,'xiaosi');
结论: 主表不存在的数据,在任何子表当中无法插入与子相关的数据


存储
drop procedure if exists dcs;  #增强健壮性,如果dcs这个存储过程存在删除

create procedure dcs (n int)   #创建一个存储过程,名字叫dcs,n就是形式参数,数据类型为int整形

begin #存储的开始
        #存储过程的函数体,也可以理解为sql语句的集合
        declare i int(20) default(select count(*) from qq); # declare 定义是一个变量,数据类型为int
        /*drop table if exists qq; #当qq表已经存在,先删除qq这个表

        create table qq(id int(20) primary key auto_increment,score int(20));
        insert into qq values(1,88),(2,77),(3,56),(4,78),(5,35),(6,24),(7,27),(8,49);*/
       
       
        #select * from qq;
        #select * from qq where id=1;
        #select * from qq where id=n;
-- --        if n=0 then
--                         select count(*) from qq;
--                 else
--                         select max(score) from qq;
--                  end if;
        /*if n=0 then
                select count(*) from qq;
        else if n>0 && n<i then
                select max(score) from qq;
        else if n>=i then
                select * from qq order by score desc;
        else
                select * from qq;
        end if;
        end if;
        end if;*/
        if n=0 then
                select count(*) from qq;
        else if n>0 && n<=i then
                select max(score) from qq;
        else
                while n>i do
                        insert into qq(score)values(66);
                        set i = i+1;
                end while;
        end if;
        end if;
        select * from qq;

end

call dcs(101);  #调用dcs()这个存储过程,注意,创建跟调用不能同时选中执行,先执行创建在执行调用,
             # 在创建存储过程的时候设置了形参,调用时必须传实参,否则会保错。


drop table qq;









分享至 : QQ空间
收藏

0 个回复

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