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

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM