MySQL觸發(fā)器是一種在表上執(zhí)行自動(dòng)化操作的特殊類型存儲(chǔ)過(guò)程。當(dāng)指定的事件發(fā)生時(shí),觸發(fā)器會(huì)觸發(fā)并執(zhí)行定義的操作。
以下是一個(gè)MySQL觸發(fā)器的UPDATE實(shí)例的詳細(xì)說(shuō)明:
假設(shè)有一個(gè)名為employees
的表,包含以下列:
id
:?jiǎn)T工ID(主鍵)name
:?jiǎn)T工姓名salary
:?jiǎn)T工薪水old_salary
:用于存儲(chǔ)上次更新前的薪水我們希望在更新員工薪水時(shí),自動(dòng)將舊薪水存儲(chǔ)到old_salary
列中。我們可以使用以下觸發(fā)器實(shí)現(xiàn):
CREATE TRIGGER update_salary_trigger
BEFORE UPDATE ON employees
FOR EACH ROW
BEGIN
SET NEW.old_salary = OLD.salary;
END;
這個(gè)觸發(fā)器被命名為update_salary_trigger
,在employees
表上的每次更新操作之前觸發(fā)。BEFORE UPDATE
關(guān)鍵字指定了觸發(fā)器在更新操作之前觸發(fā)。
FOR EACH ROW
關(guān)鍵字指定了觸發(fā)器為每行數(shù)據(jù)都執(zhí)行一次。
BEGIN
和END
之間是觸發(fā)器的操作。在這個(gè)例子中,我們使用SET
語(yǔ)句將舊薪水(即OLD.salary
)賦值給NEW.old_salary
,將更新前的薪水存儲(chǔ)到old_salary
列中。
使用這個(gè)觸發(fā)器后,當(dāng)執(zhí)行以下UPDATE語(yǔ)句時(shí):
UPDATE employees
SET salary = 5000
WHERE id = 1;
觸發(fā)器會(huì)在更新操作之前觸發(fā),將原始薪水(例如4000)存儲(chǔ)到old_salary
列中。
最終,employees
表的更新后的數(shù)據(jù)如下:
| id | name | salary | old_salary |
|----|-------|--------|------------|
| 1 | John | 5000 | 4000 |
| 2 | Jane | 3000 | 3000 |
| 3 | Alice | 2000 | 2000 |
這就是MySQL觸發(fā)器UPDATE實(shí)例的詳細(xì)說(shuō)明。觸發(fā)器可以用于執(zhí)行各種自動(dòng)化操作,以滿足特定的業(yè)務(wù)需求。