MySQL觸發器、儲存過程、自定義函式、檢視 常用SQL
create table userinfo(
userid int,
username varchar(10),
userbirthday date
);
create table userinfolog(
logtime datetime,
loginfo varchar(100)
);
delimiter //
-- 建立觸發器:
create trigger ToUserinfoLog before insert on userinfo for each row insert into userinfolog values(now(),concat(new.userid,'-',new.username));
-- 建立儲存過程
create procedure insert_userinfo(user_id int,username varchar(10),userbirthday date) begin insert into userinfo values(user_id,username,userbirthday); end//
call insert_userinfo(1,'weizi',current_date);// call insert_userinfo(2,'mini','1998-03-12');// call insert_userinfo(3,'echo','1981-01-25');// call insert_userinfo
-- 建立自定義函式
create function GetUserAge(birthday date) returns integer begin return year(now())- year(birthday); end//
-- 建立檢視
create view ViewUserInfo as select*,GetUserAge(userbirthday)as age from userinfo;//
觸發器語法 CREATE TRIGGER <觸發器名稱> <--觸發器命名
{ BEFORE | AFTER } <--觸發器有執行的時間設定:可以設定為事件發生前或後
{ INSERT | UPDATE | DELETE } <--設定觸發的事件:它們可以在執行insert、update或delete的過程中觸發
ON <表名稱> <-- 觸發器是屬於某一個表的
FOR EACH ROW <--觸發間隔,每隔一行執行一次動作
<觸發器SQL語句> <--這裡的語句可以是任何合法的語句,包括複合語句,但是這裡的語句受的限制和函式的一樣
查詢資料庫中的儲存過程和函式 select `name` from mysql.proc where db = 'your_db_name' and `type` = 'PROCEDURE'; show procedure status; select `name` from mysql.proc where db = 'your_db_name' and `type` = 'FUNCTION'; show function status; 檢視儲存過程或函式的建立程式碼 show create procedure pro_name; show create function fun_name; 類似的,可以用show create database db_name;、show create table tab_name;、show create view view_name;檢視資料庫,表,檢視等建立程式碼。 檢視檢視和表 SELECT * from information_schema.VIEWS; SELECT * from information_schema.TABLES; select * from information_schema.tables where table_schema='yourDatabaseName' and table_type='view'; show table status where comment='view'; 在mysql中,view和table是一樣的,使用show tables就可以看到新建的檢視了。 檢視觸發器 語法:SHOW TRIGGERS [FROM db_name] [LIKE expr] 例項:SHOW TRIGGERS\G 建立程式碼 show create trigger trigger_name; 呼叫儲存過程和函式 call pro_name(); select fun_name(); 刪除儲存過程、函式、觸發器 drop procedure pro_name; drop function fun_name; drop trigger t_trigger;