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 student for each row
    begin
        insert into teacher(tname) values ('sss');
    end //
    delimiter ;

2.自定义函数sql

-- 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(
    in i1 int,
    out i2 int
)
BEGIN
    set i2 = 123123;
    SELECT * from student where sid >i1 and sid <i2;
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 handler for sqlexception 
  BEGIN 
    -- ERROR 
    set p_return_code = 1; 
    rollback; 
  END; 
 
  DECLARE exit handler for sqlwarning 
  BEGIN 
    -- WARNING 
    set p_return_code = 2; 
    rollback; 
  END; 
 
  START TRANSACTION; 
    DELETE from tb1;
    insert into tb2(name)values('seven');
  COMMIT; 
 
  -- SUCCESS 
  set p_return_code = 0; 
 
  END\\
delimiter ;

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

delimiter //
CREATE procedure p6()
BEGIN
    declare row_id int;
    declare row_num int;
    declare temp int;
    declare done int default false;
    
    declare my_cursor CURSOR for select id,num from a;
    declare continue handler for not found set done=true;
    
    open my_cursor;
        xx:loop
            fetch my_cursor into row_id, row_num;
            if done then 
                leave xx;
            end if;
            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 ;
相关文章
相关标签/搜索