############# 本blog可以直接在mysql客戶端中執行 #############
# 0. 表準備
drop database abc;
create database abc;
use abc;
create table userinfo(userid int, username varchar(10), userbirthday date);
create table userinfolog(logtime datetime, loginfo varchar(100));
# 1. 觸發器
delimiter //
create trigger beforeinsertuserinfo
before insert on userinfo
for each row begin
insert into userinfolog values(now(), concat(new.userid, new.username));
end;
//delimiter ;
show triggers;
# 2. 儲存過程
drop procedure if exists spinsertuserinfo;
delimiter //
create procedure spinsertuserinfo(puserid int, pusername varchar(10), puserbirthday date)
begin
insert into userinfo values(puserid, pusername, puserbirthday);
end;
//delimiter ;
show procedure status like 'spinsertuserinfo';
call spinsertuserinfo(1, 'zhangsan', '1972-01-09');
call spinsertuserinfo(2, 'lisi', '1982-07-26');
call spinsertuserinfo(3, 'wanger', current_date);
# 3. 自定義函式
drop function if exists fngetage;
delimiter //
create function fngetage(pbirthday date)
returns integer
begin
return year(now()) - year(pbirthday);
end//
delimiter ;
# 4. 檢視
create view viewuserinfo as select *, fngetage(userbirthday) as userage from userinfo;
select * from viewuserinfo;
本示例實現如下效果:
0.test資料庫有userinfo使用者資訊表和userinfolog使用者資訊日誌表
1.建立乙個userinfo表新增記錄時的觸發器將新增日誌加入到userinfolog
2.建立乙個向userinfo表新增記錄的儲存過程
3.根據userinfo表的出生日期字段我們將建立乙個簡單算得年齡的自定義函式
4.建立乙個userinfo的檢視呼叫年齡函式
my sql 觸發器 mysql建立觸發器
首先,我們來了解一下什麼是觸發器,觸發器,就是在對一張表資料進行增 insert 刪 delete 改 update 的時候,為了保持資料的一致性,對別的表也要進行相應的資料修改。我們都知道mysql最後事務提交後,資料是會儲存到磁碟上的,那麼每次在insert,delete,update時候舊資料...
MySQL 事件 觸發器 儲存過程
事件 檢視事件狀態 show variables like event scheduler 開啟事件 set global event scheduler on 觸發器語法 建立觸發器 delimiter 定義開始和結束的標誌 create trigger triggername after bef...
mysql觸發器與儲存過程
一 異同點 觸發器和儲存過程都是一組mysql語句集,都可以實現一些比較複雜的業務邏輯,可以直接在資料庫中,編寫業務邏輯,對不同的表進行操作,執行效率較高,不同的是儲存過程需要主動呼叫,如下 給引數賦值set b 5 呼叫儲存過程,並傳入引數 call proc adder 2,b,s 獲取結果 s...