mysql游标循环去重_MySQL——5

复习

1.SQL语句

1.数据行

1.临时表 () as A

2.指定映射

select id,name 1,sum(x) from t1

3.条件

case when id>8 then xx else xx end

4.三元运算

if(isnull(xx),0,1)

5.where xx group by xx

2.上节练习

基于用户的权限管理————表的结构,导致某些操作较为复杂

基于角色的权限管理

1.用户信息表

2.权限类型表

3.角色表

4.角色权限管理

学习内容

1.union——上下连表,自动去重

union all——上下连表,不去重

2.视图

1.create view xx as SQL语句

alter view xx as SQL语句

drop view xx

3.触发器

当对某张表进行:增删改查时,使用触发器自定义关联行为

new 新数据

old 老数据

4.函数

1.内置函数

执行函数:select xx();

常用:date_format

2.自定义函数

5.存储过程(比前面的重要一点)

1.保存在MySQL上的一个别名--->一坨SQL语句

2.调用

别名()

3.用来替代程序员写SQL语句

4.方式一:

Mysql:存储过程

程序员:调用存储过程

方式二:

Mysql:检查

程序员:SQL语句

方式三:

Mysql:。。

程序员:框架(类和对象--->SQL语句)

5. 语句

1.不含参数

2.含参(in)

3.含参(out)

6.特点

1.可传参: in,out,inout

2.既有返回结果,又有返回值

7.可以通过代码,支持事务

8.游标cursor 实现循环操作

9.动态执行SQL,防注入

代码区

1.触发器

delimiter //create trigger xx before insert on studentforeach row

begin

insert into teacher(tname) values ('sss');

end//delimiter ;

2.自定义函数

-- SET GLOBAL log_bin_trust_function_creators = 1;

delimiter//create function f1(

i1 int,

i2 int)

returns int

begin

declare num int default 0;

set num= i1+i2;return(num);

end//delimiter ;

3.存储过程

delimiter //CREATE procedure p3(ini1 int,

out i2 int

)

BEGIN

set i2= 123123;

SELECT* from student where sid >i1 and sid

end//delimiter ;

set @v1=0;

SELECT @v1;

call p3(12,@v1);

SELECT @v1

4.存储过程,实现事务操作

delimiter \\

create PROCEDURE p1(

OUT p_return_code tinyint

)

BEGIN

DECLARE exit handlerforsqlexception

BEGIN--ERROR

set p_return_code= 1;

rollback;

END;

DECLARE exit handlerforsqlwarning

BEGIN--WARNING

set p_return_code= 2;

rollback;

END;

START TRANSACTION;

DELETEfromtb1;

insert into tb2(name)values('seven');

COMMIT;--SUCCESS

set p_return_code=0;

END\\

delimiter ;

5.存储过程,实现循环,游标

delimiter //CREATE procedure p6()

BEGIN

declare row_id int;

declare row_num int;

declare temp int;

declare done int default false;

declare my_cursor CURSORfor select id,num froma;

declarecontinue handler for not found set done=true;

open my_cursor;

xx:loop

fetch my_cursor into row_id, row_num;ifdone then

leave xx;

endif;

set temp=row_id+row_num;

insert into b(num) values (temp);

end loop xx;

close my_cursor;

end//delimiter ;

call p6()

6.动态执行SQL,防SQL注入

delimiter \\

DROP PROCEDURE IF EXISTS proc_sql \\

CREATE PROCEDURE proc_sql ()

BEGIN

declare p1 int;

set p1= 11;

set @p1=p1;

PREPARE prod FROM'select * from tb2 where nid > ?';

EXECUTE prod USING @p1;

DEALLOCATE prepare prod;

END\\

delimiter ;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值