mysql存储过程、函数、触发器、
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 | 当数据库版本不允许直接使用存储过程、函数的语法时用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 |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步