當數據庫版本不允許直接使用存儲過程、函數的語法時用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