复习
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 ;