计算机网络11——数据库语法2

目录

1、变量

(1)局部变量

(2)会话变量

(3)系统变量

2、判断选择

(1)if选择语法

(2)case选择

3、循环

(1)while循环

(2)其他循环

4、存储过程

5、触发器

6、事务:transaction

事务的特性

使用


1、变量

(1)局部变量

函数里面定义的,变量名  类型

(2)会话变量

本次连接会话有效,不需要定义声明,直接使用,@变量名  类型

set @x=10;
select @x;

(3)系统变量

又叫全局变量,只有root变量才能使用,一直有效。因为全局变量影响服务器运行,所以Mysql不允许自定义全局变量,只能查看和修改

查看所有的全局变量

show global variables;

select @@autocommit;

2、判断选择

(1)if选择语法

if (表达式) then 执行语句; 执行语句; 执行语句;

elseif (表达式2) 执行语句; 执行语句; 执行语句;

elseif (表达式2) 执行语句; 执行语句; 执行语句;

drop function if exists myfun;
delimiter //
create function myfun(n int)
returns varchar(45)
begin
	declare res varchar(45) default '';
    if (n>0) then set res ='正数';
    elseif (n=0) then set res='零';
    else set res='负数';
    end if;
    
    return res;
end //
delimiter ;
select myfun(0);

(2)case选择

语法1、

case 变量 when 值1 then 执行语句;执行语句;
                 when 值1 then 执行语句;执行语句;
                 when 值1 then 执行语句;执行语句;
        end case
        
语法2、
case when (表达式1) then 执行语句
      when (表达式1) then 执行语句
      when (表达式1) then 执行语句
end case

drop function if exists myfun;
delimiter //
create function myfun(n int)
returns varchar(45)
begin
	declare res varchar(45) default '';
    case when(n>0) then set res ='正数';
         when (n=0) then set res='零';
         when(n<0) then set res='负数';
    end case;
    
    return res;
end //
delimiter ;
select myfun(0);

3、循环

(1)while循环

while 条件
do
执行语句;
执行语句;
end while;

drop function if exists mySum;
delimiter //
create function mySum(n int)
returns int
begin
	declare nSum int default 0;
    declare i int default 1;
    while (i<=n)
    do
		set nSum=nSum+i;
        set i=i+1;
    end while;
    
    return nSum;
end //
delimiter ;
select mySum(10);

(2)其他循环

mysql中没有for循环
有repeat loop循环

4、存储过程

procedure是大型数据库系统中一组为了完成指定功能的sql语句集合
存储在数据库中,一次编译,永久有效
没有返回值,参数有in/out/inout类型,如果需要返回数据,可以把参数定义为out/inout类型,不定义默认是输入类型
优点:
减少网络流量
增强代码的重用性和共享性
加快系统的运行速度
使用灵活

创建存储过程语法:
delimiter //
create procedure 存储过程名(参数1 类型1,参数2 类型2........)
begin
sql语句;
end //
delimiter ;

执行存储过程
call 存储过程名(参数列表)

删除存储过程
drop procedure if exists 存储过程名

#例子:查询数据量比较大时需要分页,写一个分页的存储过程,查student表。
#输入参数当前是第几页(page int), 每页显示多少行数据(count int),表名作为参数传进来
drop procedure if exists studentTnformation;
delimiter //
create procedure studentTnformation(nPage int,nCount int)
begin
	declare nOffset int default 0;
    declare sumRows int;
    declare maxPage int;
#查询总的数据行数
select count(*) into sumRows from student;
#计算最大页数,(注意是否能够整除,mysql采用四舍五入的方式进位)
set maxPage=(sumRows/nCount);
#当nPage<=0时,显示第一页数据,当nPage超过最大页数,显示最后一页数据
set nPage=case 
				when nPage<=0 then 1
                when nPage>maxPage then maxPage
                else nPage
                end;
#计算起始页数
	set nOffset=(nPage-1)*nCount;
	select * from student limit nOffset,nCount;
    
end //
delimiter ;
call studentTnformation(2,4);

5、触发器

trigger ,当指定的事件(插入、修改、删除)发生的时候,系统自动调用

创建触发器语法
delimiter //
create trigger 触发器名字
after/before 操作名            #在发生***操作之前之后
on 表名        #产生触发的表
for each row    #影响每一行
begin
执行语句;
end //
delimiter ;

删除触发器

drop trigger if exists 触发器名

drop trigger if exists mydel;
delimiter //
create trigger mydel
after delete
on student
for each row
begin
	delete from sc where s=old.S;
    #old表:删除/修改之前
    #new:删除/修改之后

end //
delimiter ;
delete from student where s='04';

增加的触发器:每来一个同学,给这个同学默认选择01和02课程,分数是空

drop trigger if exists myinsert;
delimiter //
create trigger myinsert
after insert
on student
for each row 
begin 
	insert into sc (S,C) values (new.S,'01');
    insert into sc (S,C) values (new.S,'01');
end //
delimiter ;

insert into student (S,Sname) values (15,'人');

修改触发器,修改学生编号,对应sc表中的编号

drop trigger if exists myupdate;
delimiter //
create trigger myupdate
after update
on student
for each row 
begin 
	update sc set S=new.S where S=old.S;
end //
delimiter ;

update student set S='20' where S='15';

6、事务:transaction

作为单个逻辑工作单元指定的一系列sql语句集合,要么都执行成功,要么都不执行

事务的特性

原子性:atom 事务是最小的工作单元,不可再分,要么都执行,要么都不执行

一致性:consistency 数据库的完整性约束不能被破坏

隔离性:isolation 并行执行的事务,相互之间不影响

持久性:durability 提交以后,数据改变永久保存在数据库中、

使用

开始事务:start transaction

执行语句;

执行语句;

执行语句;

commit;                #提交改变数据

rollback;                  #回滚,数据变回到开始事务之间的状态

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值