1. 程式人生 > >MySQL觸發器、儲存過程、自定義函式、檢視 常用SQL

MySQL觸發器、儲存過程、自定義函式、檢視 常用SQL

1.建立一個userinfo表新增記錄時的觸發器 將新增日誌加入到userinfolog 2.建立一個向userinfo表新增記錄的儲存過程 3.根據userinfo表的出生日期欄位 我們將建立一個簡單算得年齡的自定義函式 4.建立一個userinfo的檢視 呼叫年齡函式

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

(4,'apple','1990-11-25');// call insert_userinfo(4,'vivi','1962-01-27');//

-- 建立自定義函式

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;