• mysql存储过程、函数、触发器、


    当数据库版本不允许直接使用存储过程、函数的语法时用delimiter // 将结束符改成//用完之后再写delimiter;将结束符改回来即可,调用过程、函数用call+其名字即可返回结果
    
    
    
    
    
    
    delimiter //
    不带参数过程
    CREATE PROCEDURE proc ()
    BEGIN
        SELECT * FROM city where type=1;
    end//
    
    调用:call proc;
    
    带参数过程
    CREATE PROCEDURE countcity1(IN count int, OUT num INT)
    BEGIN
        SELECT COUNT(*)  FROM city WHERE type=count;
    END //
    
    调用 call countcity1(1,@num);
         select @num 
    
    函数
    CREATE FUNCTION NameByZip() RETURNS CHAR(50)
    RETURN (select * from city where cityname = '上海');
    
    设置变量
    DECLARE var1 INT DEFAULT 100;
    DECLARE var2, var3, var4 INT;
    SET var2 = 10, var3 = 20;
    SET var4 = var2 + var3;
    
    设置游标
    DECLARE cursor_name CURSOR FOR select_statement ;   select_statement指的是返回的结果集
    打开游标 OPEN cursor_name{游标名称}
    使用游标 FETCH cursor_name INTO var_name [, var_name] ... {参数名称}
    关闭游标 CLOSE cursor_name{游标名称}
    例子
    DECLARE t_studentName CHAR(20);
    DECLARE t_studentAge INT;
    DECLARE cur_student CURSOR FOR SELECT studentName, studentId FROM student where studentName = 'Bruce';
    OPEN cur_student;
    FETCH cur_student INTO t_studentName, t_studentAge;
    ...
    CLOSE cur_student;
    
    IF
    IF t_studentName IS NULL
        THEN SELECT studentName INTO t_studentName FROM student where studentName = 'Bruce';
        ELSE UPDATE studentName set student = NULL where studentName = 'Bruce';
    END IF;
    
    删除
    DROP PROCEDURE CountStudent
    DROP FUNCTION NameByZip;
    
    创建触发器
    CREATE TRIGGER trigger_name trigger_time trigger_event
    ON tbl_name FOR EACH ROW trigger_stmt
    1、trigger_name标识触发器名称,用户自行指定
    2、trigger_time标识触发时机,可以指定为before或after
    3、trigger_event标识触发事件,包括INSERT、UPDATE和DELETE
    4、tbl_name标识建立触发器的表名,即在哪张表上建立触发器
    5、trigger_stmt是触发器程序体,触发器程序可以使用begin和end作为开始和结束,中间包含多条语句
    触发器例子:mysql> create trigger update_Student BEFORE update on student FOR EACH ROW
                    ->begin
                    -> update board1 set articleCount=articleCount+1 where id= NEW.bid;
                    -> end; 触发器不允许返回结果、mysql的触发器目前不能对当前表进行操作
    
    查看触发器
    SHOW TRIGGERS
    删除触发器
    DROP TRIGGER name
    
    ===========================================================
    WHERE  DATEDIFF(NOW(),reward_time)=0 可以得到当天时间
    WHERE  DATEDIFF(NOW(),reward_time)=2 可以得到前天时间 原理:参数1与参数二的值的差就是相隔的天数
    where DATEDIFF(NOW(),reward_time)<3 and DATEDIFF(NOW(),reward_time)>0 可求出前三天的总数据结果
    
    
    UNION在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。
    union all则是返回所有结果
    例子:select *
    from student
    where id < 4
    union
    select *
    from student
    where id > 2 and id < 6
    

      

  • 相关阅读:
    JS脚本延时
    Linux的关机与重启命令
    MasterCard信用卡测试卡号-creditcard-1
    HTTP_USER_AGENT
    nginx 502
    今天收到报警邮件,提示网站502 bad gateway,
    Iptables網路連線限制及攻擊防護和相關設定
    #添加屏蔽IP LINUX
    linux下启动和关闭网卡命令
    unfinish
  • 原文地址:https://www.cnblogs.com/qinyios/p/11124837.html
Copyright © 2020-2023  润新知