日韩欧美人妻无码精品白浆,夜夜嗨AV免费入口,国产欧美官网在线看,高校回应聋哑女生因长相完美被质疑

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

SQLite 觸發(fā)器:自動(dòng)化數(shù)據(jù)庫操作的強(qiáng)大工具

admin
2024年11月12日 23:54 本文熱度 1457

觸發(fā)器其實(shí)開發(fā)中基本沒用到,到是運(yùn)維中用到不少。觸發(fā)器是數(shù)據(jù)庫中的一種特殊類型的存儲(chǔ)過程,它會(huì)在特定的數(shù)據(jù)庫事件發(fā)生時(shí)自動(dòng)執(zhí)行。本文將深入探討 SQLite 觸發(fā)器的各個(gè)方面,包括其概念、語法、類型、使用場(chǎng)景以及最佳實(shí)踐。

什么是觸發(fā)器?

觸發(fā)器是一種數(shù)據(jù)庫對(duì)象,它與表關(guān)聯(lián)并在指定的數(shù)據(jù)庫事件(如插入、更新或刪除)發(fā)生時(shí)自動(dòng)執(zhí)行。觸發(fā)器可以在這些事件之前或之后執(zhí)行,用于實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則、維護(hù)數(shù)據(jù)完整性、記錄變更歷史等。

SQLite 觸發(fā)器的類型

SQLite 支持以下類型的觸發(fā)器:

  1. BEFORE 觸發(fā)器:在指定事件之前執(zhí)行。

  2. AFTER 觸發(fā)器:在指定事件之后執(zhí)行。

  3. INSERT 觸發(fā)器:在插入操作時(shí)觸發(fā)。

  4. UPDATE 觸發(fā)器:在更新操作時(shí)觸發(fā)。

  5. DELETE 觸發(fā)器:在刪除操作時(shí)觸發(fā)。


創(chuàng)建測(cè)試數(shù)據(jù)

-- 1. 創(chuàng)建用戶表CREATE TABLE users (id INTEGER PRIMARY KEY AUTOINCREMENT,username TEXT NOT NULL,age INTEGER NOT NULL,salary DECIMAL(10,2),created_at DATETIME DEFAULT CURRENT_TIMESTAMP,last_modified DATETIME DEFAULT CURRENT_TIMESTAMP);
-- 2. 創(chuàng)建用戶日志表CREATE TABLE user_logs (id INTEGER PRIMARY KEY AUTOINCREMENT,user_id INTEGER,action TEXT NOT NULL,action_date DATETIME DEFAULT CURRENT_TIMESTAMP,details TEXT,FOREIGN KEY (user_id) REFERENCES users(id));

創(chuàng)建觸發(fā)器

創(chuàng)建觸發(fā)器的基本語法如下:

CREATE TRIGGER trigger_name [BEFORE|AFTER] [INSERT|UPDATE|DELETE] ON table_name[FOR EACH ROW][WHEN condition]BEGIN ? ?-- 觸發(fā)器邏輯END;

示例:創(chuàng)建觸發(fā)器:檢查年齡限制

CREATE TRIGGER check_minimum_ageBEFORE INSERT ON usersFOR EACH ROWWHEN NEW.age < 18BEGINSELECT RAISE(ABORT, '用戶年齡必須至少18歲');END;
INSERT INTO users (username, age, salary) VALUES ('張三', 25, 5000.00);INSERT INTO users (username, age, salary) VALUES ('李四', 30, 6000.00);INSERT INTO users (username, age, salary) VALUES ('王五', 35, 7000.00);
-- 測(cè)試年齡限制觸發(fā)器(會(huì)失?。?/span>INSERT INTO users (username, age, salary) VALUES ('小明', 16, 3000.00);


創(chuàng)建觸發(fā)器:記錄用戶插入日志

CREATE TRIGGER after_insert_userAFTER INSERT ON usersFOR EACH ROWBEGININSERT INTO user_logs (user_id, action, details)VALUES (NEW.id, 'INSERT', '新用戶創(chuàng)建: ' || NEW.username);END;

觸發(fā)器的執(zhí)行時(shí)機(jī)

觸發(fā)器可以在以下時(shí)機(jī)執(zhí)行:

  1. BEFORE:在觸發(fā)事件之前執(zhí)行,可以用來驗(yàn)證或修改要插入或更新的數(shù)據(jù)。

  2. AFTER:在觸發(fā)事件之后執(zhí)行,通常用于記錄日志或執(zhí)行后續(xù)操作。

OLD 和 NEW 引用

在觸發(fā)器中,可以使用 OLD 和 NEW 引用來訪問受影響行的值:

  • OLD:引用更新或刪除之前的行值。

  • NEW:引用插入或更新之后的行值。


創(chuàng)建觸發(fā)器:限制工資增長(zhǎng)

CREATE TRIGGER before_update_salaryBEFORE UPDATE OF salary ON usersFOR EACH ROWWHEN NEW.salary > OLD.salary * 1.2BEGINSELECT RAISE(ABORT, '工資增長(zhǎng)不能超過20%');END;
-- 失敗更新(增長(zhǎng)超過20%)UPDATE users SET salary = salary * 1.3 WHERE username = '李四';

?

觸發(fā)器中的條件執(zhí)行

創(chuàng)建觸發(fā)器:更新最后修改時(shí)間

CREATE TRIGGER update_modification_dateAFTER UPDATE ON usersFOR EACH ROWBEGINUPDATE usersSET last_modified = CURRENT_TIMESTAMPWHERE id = NEW.id;END;
--成功更新(增長(zhǎng)20%以內(nèi))UPDATE?users?SET?salary?=?salary?*?1.1?WHERE?username?=?'張三';

觸發(fā)器的應(yīng)用場(chǎng)景
  1. 審計(jì)跟蹤:記錄數(shù)據(jù)變更歷史。

  2. 業(yè)務(wù)規(guī)則實(shí)施:自動(dòng)執(zhí)行復(fù)雜的業(yè)務(wù)邏輯。

  3. 數(shù)據(jù)驗(yàn)證:在數(shù)據(jù)插入或更新前進(jìn)行驗(yàn)證。

  4. 自動(dòng)更新關(guān)聯(lián)數(shù)據(jù):在一個(gè)表更新時(shí)自動(dòng)更新相關(guān)表。

  5. 計(jì)算衍生值:自動(dòng)計(jì)算和更新統(tǒng)計(jì)數(shù)據(jù)。


修改和刪除觸發(fā)器

SQLite 不直接支持修改觸發(fā)器。要修改觸發(fā)器,需要先刪除再重新創(chuàng)建:

DROP TRIGGER IF EXISTS trigger_name;

刪除觸發(fā)器:

DROP TRIGGER IF EXISTS trigger_name;

觸發(fā)器的限制和注意事項(xiàng)

  1. 觸發(fā)器不能調(diào)用包含事務(wù)控制的存儲(chǔ)過程。

  2. 觸發(fā)器中不能使用 PRAGMA 語句。

  3. 觸發(fā)器不能修改它們正在操作的表(避免無限循環(huán))。

  4. 虛擬表和臨時(shí)表不支持觸發(fā)器。


觸發(fā)器與性能

觸發(fā)器可能會(huì)影響數(shù)據(jù)庫性能:

  1. 復(fù)雜的觸發(fā)器邏輯可能會(huì)降低插入、更新和刪除操作的速度。

  2. 大量的觸發(fā)器可能會(huì)增加數(shù)據(jù)庫操作的整體延遲。

  3. 觸發(fā)器中的子查詢或復(fù)雜計(jì)算可能會(huì)顯著影響性能。


優(yōu)化建議:

  • 保持觸發(fā)器邏輯簡(jiǎn)單。

  • 避免在觸發(fā)器中執(zhí)行復(fù)雜的查詢。

  • 考慮使用索引來優(yōu)化觸發(fā)器中的查詢。


結(jié)論

SQLite 觸發(fā)器是一個(gè)強(qiáng)大的功能,可以自動(dòng)化數(shù)據(jù)庫操作,維護(hù)數(shù)據(jù)完整性,并實(shí)現(xiàn)復(fù)雜的業(yè)務(wù)規(guī)則。正確使用觸發(fā)器可以大大簡(jiǎn)化應(yīng)用程序邏輯,提高數(shù)據(jù)一致性,并自動(dòng)化許多數(shù)據(jù)庫維護(hù)任務(wù)。


該文章在 2024/11/13 14:48:42 編輯過
關(guān)鍵字查詢
相關(guān)文章
正在查詢...
點(diǎn)晴ERP是一款針對(duì)中小制造業(yè)的專業(yè)生產(chǎn)管理軟件系統(tǒng),系統(tǒng)成熟度和易用性得到了國(guó)內(nèi)大量中小企業(yè)的青睞。
點(diǎn)晴PMS碼頭管理系統(tǒng)主要針對(duì)港口碼頭集裝箱與散貨日常運(yùn)作、調(diào)度、堆場(chǎng)、車隊(duì)、財(cái)務(wù)費(fèi)用、相關(guān)報(bào)表等業(yè)務(wù)管理,結(jié)合碼頭的業(yè)務(wù)特點(diǎn),圍繞調(diào)度、堆場(chǎng)作業(yè)而開發(fā)的。集技術(shù)的先進(jìn)性、管理的有效性于一體,是物流碼頭及其他港口類企業(yè)的高效ERP管理信息系統(tǒng)。
點(diǎn)晴WMS倉儲(chǔ)管理系統(tǒng)提供了貨物產(chǎn)品管理,銷售管理,采購管理,倉儲(chǔ)管理,倉庫管理,保質(zhì)期管理,貨位管理,庫位管理,生產(chǎn)管理,WMS管理系統(tǒng),標(biāo)簽打印,條形碼,二維碼管理,批號(hào)管理軟件。
點(diǎn)晴免費(fèi)OA是一款軟件和通用服務(wù)都免費(fèi),不限功能、不限時(shí)間、不限用戶的免費(fèi)OA協(xié)同辦公管理系統(tǒng)。
Copyright 2010-2025 ClickSun All Rights Reserved