最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL開(kāi)發(fā)中存儲(chǔ)函數(shù)與觸發(fā)器使用示例

 更新時(shí)間:2023年01月12日 09:58:12   作者:愛(ài)吃豆的土豆  
這篇文章主要為大家詳細(xì)介紹了MySQL中存儲(chǔ)函數(shù)的創(chuàng)建與觸發(fā)器的設(shè)置,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,需要的可以參考一下

1、存儲(chǔ)函數(shù)

1.1、介紹

存儲(chǔ)函數(shù)是有返回值的存儲(chǔ)過(guò)程,存儲(chǔ)函數(shù)的參數(shù)只能是IN類型的。具體語(yǔ)法如下:

CREATE FUNCTION 存儲(chǔ)函數(shù)名稱 ([ 參數(shù)列表 ])
RETURNS type [characteristic ...]
BEGIN
-- SQL語(yǔ)句
RETURN ...;
END ;

characteristic說(shuō)明:

  • DETERMINISTIC:相同的輸入?yún)?shù)總是產(chǎn)生相同的結(jié)果
  • NO SQL :不包含 SQL 語(yǔ)句。
  • READS SQL DATA:包含讀取數(shù)據(jù)的語(yǔ)句,但不包含寫入數(shù)據(jù)的語(yǔ)句。

1.2、案例

計(jì)算從1累加到n的值,n為傳入的參數(shù)值。

create function fun1(n int)
returns int deterministic
begin
        declare total int default 0;
        while n>0 do
            set total := total + n;
            set n := n - 1;
        end while;
        return total;
end;
select fun1(50);

在mysql8.0版本中binlog默認(rèn)是開(kāi)啟的,一旦開(kāi)啟了,mysql就要求在定義存儲(chǔ)過(guò)程時(shí),需要指定 characteristic特性,否則就會(huì)報(bào)如下錯(cuò)誤:

2、觸發(fā)器

2.1、介紹

觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫(kù)對(duì)象,指在insert/update/delete之前(BEFORE)或之后(AFTER),觸 發(fā)并執(zhí)行觸發(fā)器中定義的SQL語(yǔ)句集合。觸發(fā)器的這種特性可以協(xié)助應(yīng)用在數(shù)據(jù)庫(kù)端確保數(shù)據(jù)的完整性 , 日志記錄 , 數(shù)據(jù)校驗(yàn)等操作 。 使用別名OLD和NEW來(lái)引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫(kù)是相似的?,F(xiàn)在觸發(fā)器還 只支持行級(jí)觸發(fā),不支持語(yǔ)句級(jí)觸發(fā)。

2.2、語(yǔ)法

觸發(fā)器類型NEW 和 OLD
INSERT 型觸發(fā)器NEW 表示將要或者已經(jīng)新增的數(shù)據(jù)
UPDATE 型觸發(fā)器    OLD 表示修改之前的數(shù)據(jù) , NEW 表示將要或已經(jīng)修改后的數(shù)據(jù)
DELETE 型觸發(fā)器    OLD 表示將要或者已經(jīng)刪除的數(shù)據(jù)

1). 創(chuàng)建

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON tbl_name FOR EACH ROW -- 行級(jí)觸發(fā)器
BEGIN
trigger_stmt ;
END;

2). 查看

SHOW TRIGGERS ;

3). 刪除

DROP TRIGGER [schema_name.]trigger_name ; -- 如果沒(méi)有指定 schema_name,默認(rèn)為當(dāng)前數(shù)據(jù)庫(kù) 。

2.3、案例

通過(guò)觸發(fā)器記錄 tb_user 表的數(shù)據(jù)變更日志,將變更日志插入到日志表user_logs中, 包含增加, 修改 , 刪除 ; 表結(jié)構(gòu)準(zhǔn)備:

-- 準(zhǔn)備工作 : 日志表 user_logs
create table user_logs(
id int(11) not null auto_increment,
operation varchar(20) not null comment '操作類型, insert/update/delete',
operate_time datetime not null comment '操作時(shí)間',
operate_id int(11) not null comment '操作的ID',
operate_params varchar(500) comment '操作參數(shù)',
primary key(`id`)
)engine=innodb default charset=utf8;

A. 插入數(shù)據(jù)觸發(fā)器

create trigger tb_user_insert_trigger
after insert on tb_user for each row
begin
insert into user_logs(id, operation, operate_time, operate_id, operate_params)
VALUES
(null, 'insert', now(), new.id, concat('插入的數(shù)據(jù)內(nèi)容為:
id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ',
profession=', NEW.profession));
end;

測(cè)試:

-- 查看
show triggers ;
-- 插入數(shù)據(jù)到tb_user
insert into tb_user(id, name, phone, email, profession, age, gender, status,
createtime) VALUES (26,'三皇子','18809091212','erhuangzi@163.com','軟件工
程',23,'1','1',now());

測(cè)試完畢之后,檢查日志表中的數(shù)據(jù)是否可以正常插入,以及插入數(shù)據(jù)的正確性。 B. 修改數(shù)據(jù)觸發(fā)器

create trigger tb_user_update_trigger
after update on tb_user for each row
begin
insert into user_logs(id, operation, operate_time, operate_id, operate_params)
VALUES
(null, 'update', now(), new.id,
concat('更新之前的數(shù)據(jù): id=',old.id,',name=',old.name, ', phone=',
old.phone, ', email=', old.email, ', profession=', old.profession,
' | 更新之后的數(shù)據(jù): id=',new.id,',name=',new.name, ', phone=',
NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));
end;

測(cè)試:

-- 查看
show triggers ;
-- 更新
update tb_user set profession = '會(huì)計(jì)' where id = 23;
update tb_user set profession = '會(huì)計(jì)' where id <= 5;

測(cè)試完畢之后,檢查日志表中的數(shù)據(jù)是否可以正常插入,以及插入數(shù)據(jù)的正確性。 C. 刪除數(shù)據(jù)觸發(fā)器

create trigger tb_user_delete_trigger
after delete on tb_user for each row
begin
insert into user_logs(id, operation, operate_time, operate_id, operate_params)
VALUES
(null, 'delete', now(), old.id,
concat('刪除之前的數(shù)據(jù): id=',old.id,',name=',old.name, ', phone=',
old.phone, ', email=', old.email, ', profession=', old.profession));
end;

測(cè)試:

-- 查看
show triggers ;
-- 刪除數(shù)據(jù)
delete from tb_user where id = 26;

測(cè)試完畢之后,檢查日志表中的數(shù)據(jù)是否可以正常插入,以及插入數(shù)據(jù)的正確性。

到此這篇關(guān)于MySQL開(kāi)發(fā)中存儲(chǔ)函數(shù)與觸發(fā)器使用示例的文章就介紹到這了,更多相關(guān)MySQL存儲(chǔ)函數(shù)與觸發(fā)器內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mysql正確安全清空在線慢查詢?nèi)罩緎low log的流程分享

    mysql正確安全清空在線慢查詢?nèi)罩緎low log的流程分享

    這篇文章主要介紹了正確安全清空在線慢查詢?nèi)罩緎low log的流程,需要的朋友可以參考下
    2014-02-02
  • mysql學(xué)習(xí)筆記之完整的select語(yǔ)句用法實(shí)例詳解

    mysql學(xué)習(xí)筆記之完整的select語(yǔ)句用法實(shí)例詳解

    這篇文章主要介紹了mysql學(xué)習(xí)筆記之完整的select語(yǔ)句用法,結(jié)合實(shí)例形式詳細(xì)分析了mysql select語(yǔ)句各種常見(jiàn)參數(shù)、使用方法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-04-04
  • MySQL性能設(shè)置

    MySQL性能設(shè)置

    網(wǎng)站訪問(wèn)量越來(lái)越大,MySQL自然成為瓶頸,因此最近我一直在研究 MySQL 的優(yōu)化,第一步自然想到的是 MySQL 系統(tǒng)參數(shù)的優(yōu)化
    2006-12-12
  • MySQL 權(quán)限控制詳解

    MySQL 權(quán)限控制詳解

    這篇文章主要介紹了MySQL 權(quán)限控制詳解的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MySQL,感興趣的朋友可以了解下
    2021-03-03
  • MySQL算術(shù)/比較/邏輯/位/運(yùn)算符與正則舉例詳解

    MySQL算術(shù)/比較/邏輯/位/運(yùn)算符與正則舉例詳解

    每種數(shù)據(jù)庫(kù)都支持SQL語(yǔ)句,但是它們也都有各自支持的運(yùn)算符,下面這篇文章主要給大家介紹了關(guān)于MySQL算術(shù)/比較/邏輯/位/運(yùn)算符與正則的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • MySQL中union和unionall區(qū)別

    MySQL中union和unionall區(qū)別

    本文主要介紹了MySQL中union和unionall區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 三十分鐘MySQL快速入門(圖解)

    三十分鐘MySQL快速入門(圖解)

    通過(guò)分享本文帶領(lǐng)大家三十分鐘入門mysql,包括sql的基礎(chǔ)知識(shí),creat語(yǔ)法知識(shí),非常不錯(cuò),具有一定的參考借鑒價(jià)值,感興趣的朋友一起看看吧
    2016-11-11
  • Mysql 中文排序規(guī)則說(shuō)明

    Mysql 中文排序規(guī)則說(shuō)明

    這篇文章主要介紹了Mysql 中文排序規(guī)則說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • MySQL存儲(chǔ)引擎InnoDB的配置與使用的講解

    MySQL存儲(chǔ)引擎InnoDB的配置與使用的講解

    今天小編就為大家分享一篇關(guān)于MySQL存儲(chǔ)引擎InnoDB的配置與使用的講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-03-03
  • mysql中json基礎(chǔ)查詢?cè)斀?附圖文)

    mysql中json基礎(chǔ)查詢?cè)斀?附圖文)

    MySQL提供了一些函數(shù)來(lái)對(duì)JSON數(shù)據(jù)進(jìn)行操作,下面這篇文章主要給大家介紹了關(guān)于mysql中json基礎(chǔ)查詢的相關(guān)資料,文中通過(guò)圖文以及實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10

最新評(píng)論

弥渡县| 丰原市| 大英县| 万盛区| 新源县| 陇南市| 浮梁县| 怀柔区| 昌宁县| 屏南县| 永仁县| 康乐县| 玉屏| 田东县| 炉霍县| 巴林左旗| 厦门市| 彰化市| 阳泉市| 安阳县| 江达县| 柯坪县| 油尖旺区| 抚州市| 平果县| 锦屏县| 通化市| 怀来县| 宁武县| 垣曲县| 恩施市| 郯城县| 佳木斯市| 宜黄县| 剑河县| 遂昌县| 和林格尔县| 搜索| 岐山县| 缙云县| 巩义市|