MySQL編程開發

變量

系統變量:MySQL內置變量

#查看所有系統變量

show variables \G;

#通過模糊查詢篩選變量

show variables like %path%;

全局變量:在所有終端中都生效;

會話變量:在當前會話(本次登錄);

#可以通過set變量

臨時修改全局變量(需權限)

set global max_connections = 200; 調整最大連接數為200

select @@max_connections;

臨時修改會話變量(當前連接生效)

set session wait timeout = 3600; 調整超時時間為1小時

用戶變量:用于臨時存儲,用戶自己的數據,例如:Selectd的查詢結果。

#用戶變量,臨時存儲查詢的結果

select username into @user name from users where id=1;

#也可以進行一些運算,被函數調用

局部變量:在存儲過程內部定義變量,只在該存儲過程內部有效。

觸發器

觸發器(Triggers)是當某個表在進行(update\insert\deletc)操作時,自動同步進行的關聯操作。

例如:在對A表insert一條新的數據,B表會同步記錄日志。

特性:確保數據的完整性,日志記錄,數據校驗等操作。

觸發器類型

NEW 和 OLD的使用

INSERT 型觸發器

NEW 表示將要或者已經新增的數據

UPDATE 型觸發器

OLD 表示修改之前的數據 , NEW 表示將要或已經修改后的數據

DELETE 型觸發器

OLD 表示將要或者已經刪除的數據

觸發器注意事項

1.性能影響:觸發器會在每次相關事件發生時自動執行,這可能會對性能產生影響,特別是當觸發器邏輯復雜或者表中數據量很大時。

2.調試困難:觸發器的錯誤可能不易察覺,調試時需要特別注意。

3.遞歸觸發:觸發器中的操作可能會導致觸發器的遞歸調用,需要避免這種情況,以免導致無限循環。

觸發器六種執行時間和事件

1. BEFORE INSERT

執行時間:在插入操作發生之前。

作用:允許你在數據插入之前修改數據,或對插入操作進行驗證。

2. AFTER INSERT

執行時間:在插入操作發生之后。

作用:可以在數據插入后執行額外的操作,如更新其他表、記錄日志等。

3. BEFORE UPDATE

執行時間:在更新操作發生之前。

作用:允許你在數據更新之前對數據進行校驗或修改。

4. AFTER UPDATE

執行時間:在更新操作發生之后。

作用:用于在數據更新之后執行一些后續操作,比如同步其他表的數據或執行計算。

5. BEFORE DELETE

執行時間:在刪除操作發生之前。

作用:允許你在數據刪除之前進行某些檢查或處理,例如備份刪除的數據或記錄日志。

6. AFTER DELETE

執行時間:在刪除操作發生之后。

作用:用于在數據刪除之后執行一些操作,如清理相關數據或通知系統其他部分。

觸發器的執行順序

BEFORE INSERT 觸發器在 AFTER INSERT 觸發器之前執行。

BEFORE UPDATE 觸發器在 AFTER UPDATE 觸發器之前執行。

BEFORE DELETE 觸發器在 AFTER DELETE 觸發器之前執行。

語法結構

1.創建觸發器

create trigger trigger_name

before/after insert/update/delete

on tbl_name

[ for each row ] ?-- 行級觸發器

begin

????trigger_stmt ;

end;

2.刪除觸發器

drop trigger [schema_name.]trigger_name

3.查看觸發器

show triggers ;

操作步驟

假設我們有一個員工表 employees 和一個日志表 employee_log。每當有新的員工被插入到 employees 表時,我們希望在 employee_log 表中記錄這次插入的操作。

1.創建表

(1)創建 employees 表

CREATE TABLE employees (

????id INT AUTO_INCREMENT PRIMARY KEY,

????name VARCHAR(100) NOT NULL,

????position VARCHAR(100),

????salary DECIMAL(10, 2)

);

(2)創建 employee_log 表

CREATE TABLE employee_log (

????log_id INT AUTO_INCREMENT PRIMARY KEY,

????action_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP,

????action_type VARCHAR(50),

????employee_id INT,

????employee_name VARCHAR(100),

????employee_position VARCHAR(100),

????employee_salary DECIMAL(10, 2)

);

2.創建插入觸發器

DELIMITER //

CREATE TRIGGER after_employee_insert

AFTER INSERT ON employees

FOR EACH ROW

BEGIN

????INSERT INTO employee_log (action_type, employee_id, employee_name, employee_position, employee_salary)

????VALUES ('INSERT', NEW.id, NEW.name, NEW.position, NEW.salary);

END;

//

DELIMITER ;

存儲過程

將一條或多條復雜的SQL語句,包含在存儲過程中,存放在服務。

客戶端使用call存儲過程名;執行該存儲過程;

優點:簡化客戶端的SQL編寫,減少網絡發送的數據量,加速執行,提高效率。

缺點:但在可移植性、調試、資源占用等方面存在不足。

存儲過程適合用于處理數據庫端的復雜、高頻復用的業務邏輯,能提升性能和安全性;但在可移植性、調試、資源占用等方面存在不足。實際使用中需根據具體場景權衡,避免過度依賴或完全摒棄。

函數

對數據進行簡單處理,例如:求和、平均值、最大值、最小值、文本處理,獲取時間等…,函數有返回值。

使用select 函數名(參數) …;

MySQL內置

MySQL自定義函數

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/97641.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/97641.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/97641.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

20250830_Oracle 19c CDB+PDB(QMS)默認表空間、臨時表空間、歸檔日志、閃回恢復區巡檢手冊

PDB 關業務,CDB 管底層;每天緊盯 PDB,必要時看 CDB。 一、CDB 與 PDB 的關系 Oracle 12c 以后引入 多租戶架構(Multitenant),分成兩類容器: 層級 名稱 作用 存儲內容 典型操作 CDB CDB$ROOT(容器數據庫) 數據庫實例的根容器 Oracle 元數據、系統表字典、公共用戶、PDB…

什么是MIPS架構?RISC-V架構?有什么區別?【超詳細初學者教程】

什么是MIPS架構?RISC-V架構?有什么區別?【超詳細初學者教程】 關鍵詞:MIPS架構,RISC-V架構,精簡指令集RISC,嵌入式系統,CPU架構對比,指令集架構,開源處理器&…

IDEA Spring屬性注解依賴注入的警告 Field injection is not recommended 異常解決方案

一、異常錯誤 在使用 IntelliJ IDEA 進行 Spring 開發時,當使用 Autowired 注解直接在字段上進行依賴注入時,IDE 會顯示黃色警告: Field injection is not recommended這個警告出現在以下代碼模式中: Service public class UserSe…

智能核心:機器人芯片的科技革新與未來挑戰

在人工智能與機器人技術深度融合的今天,機器人芯片作為驅動智能機器的“大腦”,正成為科技競爭的戰略制高點。這一微小卻至關重要的硬件,決定了機器人的計算能力、響應速度與智能水平,是機器人從“自動化”邁向“自主化”的關鍵所…

經典掃雷游戲實現:從零構建HTML5掃雷游戲

一、引言 掃雷是一款經典的單人益智游戲,起源于20世紀60年代,并在90年代隨著Windows操作系統的普及而風靡全球。本文將詳細介紹如何使用現代網頁技術(HTML、CSS和JavaScript)從零開始構建一個功能完整的掃雷游戲。我們將涵蓋游戲邏…

ccache編譯加速配置

ccache 介紹 ccache(“compiler cache”的縮寫)是一個編譯器緩存,該工具會高速緩存編譯生成的信息,并在編譯的特定部分使用高速緩存的信息, 比如頭文件,這樣就節省了通常使用 cpp 解析這些信息所需要的時間。 github :https://github.com/ccache/ccache home:https://c…

數據庫主鍵選擇策略分析

為什么不推薦使用數據庫自增主鍵?分庫分表問題:自增ID在分庫分表場景下會導致ID沖突需要額外機制(如步長設置)來保證全局唯一,增加系統復雜度安全性問題:自增ID容易暴露業務量(如訂單號連續)可能被惡意爬取數據分布式系統限制&…

線性代數理論——狀態空間的相關概念以及由系統的輸入輸出導出狀態空間描述

線性代數理論——狀態空間 狀態:動態系統的狀態就是指系統的過去、現在、將來的運動狀況,精確的說就是狀態需要一組必要而充分的數據來表明。 狀態變量:可以表達系統運動狀態的變量都是狀態變量。 狀態變量組:可以完全表征系統在時…

【GaussDB】排查應用高可用切換出現數據庫整體卡頓及報錯自治事務無法創建的問題

【GaussDB】排查應用高可用切換出現數據庫整體卡頓及報錯自治事務無法創建的問題 背景 某客戶在做應用程序的高可用切換測試,在應用程序中,收到了來自數據庫的報錯,不能創建自治事務 ERROR: autonomous transaction failed to create auton…

shell腳本第五階段---shell函數與正則表達式

學習目標掌握case語句的基本語法結構掌握函數的定義以及調用掌握常用的正則表達式元字符含義一、case語句case語句為多選擇語句。可以用case語句匹配一個值與一個模式,如果匹配成功,執行相匹配的命令。case var in 定義變量;var代表變量名…

164.在 Vue3 中使用 OpenLayers 加載 Esri 地圖(多種形式)

適配:Vue 3 Vite TypeScript(也兼容 JS) 地圖引擎:OpenLayers v10 目標:一次性學會 多種 Esri 底圖加載方式、注記疊加、動態切換、令牌(Token)鑒權、常見坑位排查。一、效果預覽二、為什么選…

深入了解Flink核心:Slot資源管理機制

TaskExecutor、Task 和 Slot 簡單來說,它們的關系可以比作:TaskExecutor:一個工廠,擁有固定的生產資源。TaskSlot:工廠里的一個工位。每個工位都預先分配了一份獨立的資源(主要是內存)。Task&am…

java web 練習demo。生成簡單驗證碼前端是jsp

目錄結構 demo\ ├── WEB-INF\ │ └── weblogic.xml # WebLogic服務器配置文件 ├── demo.iml # IntelliJ IDEA項目配置文件 ├── lib\ # Java EE核心依賴庫 │ ├── javax.annotation.jar │ ├── javax.ejb.jar │ ├── javax.…

擁抱智能高效翻譯 ——8 款視頻翻譯工具深度測評

前陣子幫知識博主做跨境視頻翻譯,踩了不少坑:把 “內卷” 直譯成 “involution” 讓海外觀眾困惑,多語種版本趕工 3 天只出 2 種,還得手動核對 “碳中和”“非遺” 這類特色詞的譯法;用傳統工具譯完,視頻要…

[知識點記錄]SQLite 數據庫和MySQL 數據庫有什么區別?

核心區別:一個“內嵌”,一個“獨立”SQLite (你的個人筆記本)本質: 它是“無服務器”的,或者叫“內嵌式”數據庫。它不需要一個獨立的程序一直在后臺運行。你的應用程序(比如Strapi)直接就能讀寫它的數據庫…

【Spark Core】(二)RDD編程入門

目錄1 程序入口&#xff1a;SparkContext對象2 RDD的創建2.1 本地創建2.2 讀取文件創建3 RDD算子4 常用Transform算子4.1 map算子4.2 flatMap算子4.3 reduceBykey算子4.4 mapValues算子<實例> WordCount4.5 groupBy算子4.6 filter算子4.7 distinct算子4.8 union算子4.9 j…

java IDEA run/Debug異常:“jdk1.8injava.exe“ CreateProcess error=206, 文件名或擴展名太長

&#x1f9d1; 博主簡介&#xff1a;CSDN博客專家、CSDN平臺優質創作者&#xff0c;高級開發工程師&#xff0c;數學專業&#xff0c;10年以上C/C, C#,Java等多種編程語言開發經驗&#xff0c;擁有高級工程師證書&#xff1b;擅長C/C、C#等開發語言&#xff0c;熟悉Java常用開發…

Java 函數編程之【過濾器filter()合并】【predicate(斷言)】與【謂詞邏輯】

Java函數式編程之【過濾器filter合并】【predicate&#xff08;斷言&#xff09;】與【謂詞邏輯】一、合并多個過濾器filter &#xff08;Lambda版本&#xff09;二、合并多個過濾器filter &#xff08;謂詞邏輯&#xff08;Predicate&#xff09;版本&#xff09;&#xff08;…

CentOS10安裝RabbitMQ

1.下載資源 &#xff08;1&#xff09;下載erlang-rpm 注意&#xff1a;按照圖片中的下載&#xff0c;用綠色三角形指向的是重點關注的。 網址&#xff1a; erlang-rpmhttps://github.com/rabbitmq/erlang-rpm/releases &#xff08;2&#xff09;下載rabbitmq-server 注…

JVM——八股文

1. JDK, JRE和JVM的關系JDK JRE Java開發工具JRE JVM Java核心類庫JDK供Java程序開發人員開發軟件&#xff0c;JRE供客戶使用&#xff0c;只需要JVM運行環境即可。JVM運行的是class字節碼&#xff0c;不僅能運行Java代碼&#xff0c;還能運行其他語言&#xff0c;只要語言能…