久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

MySQL存儲(chǔ)函數(shù)以及觸發(fā)器詳解

瀏覽:3日期:2023-08-14 20:18:43
目錄MySQLSQL存儲(chǔ)函數(shù)1). 介紹2). 案例 觸發(fā)器介紹 語法1). 創(chuàng)建2). 查看3). 刪除案例A. 插入數(shù)據(jù)觸發(fā)器測試:B. 修改數(shù)據(jù)觸發(fā)器測試:C. 刪除數(shù)據(jù)觸發(fā)器測試:MySQL

MySQL是一個(gè)關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),屬于 Oracle 旗下產(chǎn)品。MySQL 是最流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一,在 WEB 應(yīng)用方面,MySQL是最好的 RDBMS (Relational Database Management System,關(guān)系數(shù)據(jù)庫管理系統(tǒng)) 應(yīng)用軟件之一。MySQL是一種關(guān)系型數(shù)據(jù)庫管理系統(tǒng),關(guān)系數(shù)據(jù)庫將數(shù)據(jù)保存在不同的表中,而不是將所有數(shù)據(jù)放在一個(gè)大倉庫內(nèi),這樣就增加了速度并提高了靈活性。MySQL所使用的 SQL 語言是用于訪問數(shù)據(jù)庫的最常用標(biāo)準(zhǔn)化語言。MySQL 軟件采用了雙授權(quán)政策,分為社區(qū)版和商業(yè)版,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點(diǎn),一般中小型和大型網(wǎng)站的開發(fā)都選擇 MySQL 作為網(wǎng)站數(shù)據(jù)庫。

SQL

結(jié)構(gòu)化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數(shù)據(jù)庫查詢和程序設(shè)計(jì)語言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫系統(tǒng)。結(jié)構(gòu)化查詢語言是高級(jí)的非過程化編程語言,允許用戶在高層數(shù)據(jù)結(jié)構(gòu)上工作。它不要求用戶指定對(duì)數(shù)據(jù)的存放方法,也不需要用戶了解具體的數(shù)據(jù)存放方式,所以具有完全不同底層結(jié)構(gòu)的不同數(shù)據(jù)庫系統(tǒng), 可以使用相同的結(jié)構(gòu)化查詢語言作為數(shù)據(jù)輸入與管理的接口。結(jié)構(gòu)化查詢語言語句可以嵌套,這使它具有極大的靈活性和強(qiáng)大的功能。

存儲(chǔ)函數(shù)1). 介紹

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

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

characteristic 說明

DETERMINISTIC :相同的輸入?yún)?shù)總是產(chǎn)生相同的結(jié)果

NO SQL :不包含 SQL 語句。

READS SQL DATA :包含讀取數(shù)據(jù)的語句,但不包含寫入數(shù)據(jù)的語句。

2). 案例

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

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

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

觸發(fā)器介紹

觸發(fā)器是與表有關(guān)的數(shù)據(jù)庫對(duì)象,指在 insert/update/delete 之前 (BEFORE) 或之后 (AFTER) ,觸發(fā)并執(zhí)行觸發(fā)器中定義的 SQL 語句集合。觸發(fā)器的這種特性可以協(xié)助應(yīng)用在數(shù)據(jù)庫端確保數(shù)據(jù)的完整性, 日志記錄 , 數(shù)據(jù)校驗(yàn)等操作 。

使用別名 OLD 和 NEW 來引用觸發(fā)器中發(fā)生變化的記錄內(nèi)容,這與其他的數(shù)據(jù)庫是相似的。現(xiàn)在觸發(fā)器還只支持行級(jí)觸發(fā),不支持語句級(jí)觸發(fā)。

語法1). 創(chuàng)建CREATE TRIGGER trigger_nameBEFORE/AFTER INSERT/UPDATE/DELETEON tbl_name FOR EACH ROW -- 行級(jí)觸發(fā)器BEGINtrigger_stmt ;END; 2). 查看SHOW TRIGGERS ;3). 刪除DROP TRIGGER [schema_name.]trigger_name ; -- 如果沒有指定 schema_name,默認(rèn)為當(dāng)前數(shù)據(jù)庫 。案例

通過觸發(fā)器記錄 tb_user 表的數(shù)據(jù)變更日志,將變更日志插入到日志表 user_logs 中 , 包含增加 ,

修改 , 刪除 ;

表結(jié)構(gòu)準(zhǔn)備 :

-- 準(zhǔn)備工作 : 日志表 user_logscreate 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_triggerafter insert on tb_user for each rowbegininsert 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;測試:-- 查看show triggers ;-- 插入數(shù)據(jù)到tb_userinsert into tb_user(id, name, phone, email, profession, age, gender, status,createtime) VALUES (26,'三皇子','18809091212','erhuangzi@163.com','軟件工程',23,'1','1',now());

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

B. 修改數(shù)據(jù)觸發(fā)器create trigger tb_user_update_triggerafter update on tb_user for each rowbegininsert 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;測試:-- 查看show triggers ;-- 更新update tb_user set profession = '會(huì)計(jì)' where id = 23;update tb_user set profession = '會(huì)計(jì)' where id <= 5;

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

C. 刪除數(shù)據(jù)觸發(fā)器create trigger tb_user_delete_triggerafter delete on tb_user for each rowbegininsert 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;測試:-- 查看show triggers ;-- 刪除數(shù)據(jù)delete from tb_user where id = 26;

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

到此這篇關(guān)于MySQL存儲(chǔ)函數(shù)以及觸發(fā)器詳解的文章就介紹到這了,更多相關(guān)MySQL存儲(chǔ)函數(shù)及觸發(fā)器內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 久久国产一区二区三区 | 精品无人乱码一区二区三区的优势 | 国产农村妇女精品 | 亚洲成av | 9se成人免费网站 | 亚洲理论电影在线观看 | 精品一级| 99成人| 中文字幕乱码一区二区三区 | 成人国产电影 | 日韩一区二区精品视频 | 午夜性电影 | 可以看黄的视频 | 乳色吐息在线观看 | 看毛片的网站 | 韩日视频在线观看 | 国产成人网 | 日本不卡一区二区三区在线观看 | 国产视频二 | 一区二区国产精品 | 久久aⅴ乱码一区二区三区 91综合网 | 最新日韩一区 | 性欧美久久久 | 精品久久久久久久久久久久久久久久久久久 | 亚洲天堂第一页 | 久久国产精品免费一区二区三区 | 欧美精品激情 | 不卡久久 | 国产精品视频免费播放 | 99精品国产高清一区二区麻豆 | 国产欧美日韩在线观看 | 欧美一区二区三区 | 国产在线观看一区 | 日日射天天干 | 久久精品黄 | 毛片网 | 国产精品污www在线观看 | 国产永久免费观看 | 国产精品一区二区三区四区 | 亚洲视频精品在线 | 日本99精品 |