Kích hoạt XÓA MySQL

Trình kích hoạt là một tập hợp các hành động được chạy tự động khi một thao tác thay đổi đã chỉ định (câu lệnh SQL INSERT, UPDATE hoặc DELETE) được thực hiện trên một bảng đã chỉ định. Trình kích hoạt hữu ích cho các tác vụ như thực thi quy tắc kinh doanh, xác thực dữ liệu đầu vào và theo dõi kiểm toán

nội dung

Sử dụng cho kích hoạt

  • Thực thi các quy tắc kinh doanh
  • Xác thực dữ liệu đầu vào
  • Tạo một giá trị duy nhất cho một hàng mới được chèn vào một tệp khác
  • Ghi vào các tệp khác cho mục đích theo dõi kiểm toán
  • Truy vấn từ các tệp khác cho mục đích tham chiếu chéo
  • Truy cập chức năng hệ thống
  • Sao chép dữ liệu sang các tệp khác nhau để đạt được tính nhất quán của dữ liệu

Lợi ích của việc sử dụng trigger trong kinh doanh

  • Phát triển ứng dụng nhanh hơn. Vì cơ sở dữ liệu lưu trữ các trình kích hoạt nên bạn không phải viết mã các hành động kích hoạt vào từng ứng dụng cơ sở dữ liệu
  • Thực thi toàn cầu các quy tắc kinh doanh. Xác định trình kích hoạt một lần và sau đó sử dụng lại nó cho bất kỳ ứng dụng nào sử dụng cơ sở dữ liệu
  • bảo trì dễ dàng hơn. Nếu chính sách nghiệp vụ thay đổi, bạn chỉ cần thay đổi chương trình kích hoạt tương ứng thay vì từng chương trình ứng dụng
  • Cải thiện hiệu suất trong môi trường máy khách/máy chủ. Tất cả các quy tắc chạy trên máy chủ trước khi kết quả trả về

Việc triển khai trình kích hoạt SQL dựa trên tiêu chuẩn SQL. Nó hỗ trợ các cấu trúc phổ biến cho hầu hết các ngôn ngữ lập trình. Nó hỗ trợ khai báo các biến cục bộ, các câu lệnh để kiểm soát luồng thủ tục, gán kết quả biểu thức cho các biến và xử lý lỗi

Trình kích hoạt MySQL

Chúng tôi cho rằng bạn đã quen với "Quy trình lưu trữ MySQL", nếu không, bạn có thể đọc hướng dẫn Quy trình MySQL của chúng tôi. Bạn có thể sử dụng các câu lệnh sau của thủ tục MySQL trong trình kích hoạt

  • Câu lệnh ghép ()
  • Khai báo biến () và gán (SET)
  • Các câu lệnh điều khiển luồng ( , , , , , , , )
  • khai báo điều kiện
  • khai báo xử lý

Làm cách nào để tạo trình kích hoạt MySQL?

Trình kích hoạt là một đối tượng cơ sở dữ liệu được đặt tên được liên kết với một bảng và kích hoạt khi một sự kiện cụ thể (e. g. thao tác chèn, cập nhật hoặc xóa) xảy ra đối với bảng. Câu lệnh CREATE TRIGGER tạo một trigger mới trong MySQL. Đây là cú pháp

cú pháp

CREATE     
[DEFINER = { user | CURRENT_USER }]     
TRIGGER trigger_name     
trigger_time trigger_event     
ON tbl_name FOR EACH ROW     
trigger_body
trigger_time: { BEFORE | AFTER } 
trigger_event: { INSERT | UPDATE | DELETE }

Giải trình

mệnh đề ĐỊNH NGHĨA. Mệnh đề DEFINER chỉ định tài khoản MySQL sẽ được sử dụng khi kiểm tra các đặc quyền truy cập tại thời điểm kích hoạt trình kích hoạt. Nếu giá trị người dùng được cung cấp, thì đó phải là tài khoản MySQL được chỉ định là 'user_name'@'host_name' (cùng định dạng được sử dụng trong câu lệnh GRANT), CURRENT_USER hoặc CURRENT_USER()
Giá trị DEFINER mặc định là người dùng thực thi câu lệnh CREATE TRIGGER. Điều này giống như chỉ định rõ ràng DEFINER = CURRENT_USER
Nếu bạn chỉ định mệnh đề DEFINER, các quy tắc này sẽ xác định giá trị người dùng DEFINER hợp lệ

  • Nếu bạn không có đặc quyền SUPER, giá trị người dùng được phép duy nhất là tài khoản của chính bạn, được chỉ định theo nghĩa đen hoặc bằng cách sử dụng CURRENT_USER. Bạn không thể đặt định nghĩa cho một số tài khoản khác
  • Nếu bạn có đặc quyền SUPER, bạn có thể chỉ định bất kỳ tên tài khoản hợp lệ nào về mặt cú pháp. Nếu tài khoản không thực sự tồn tại, một cảnh báo sẽ được tạo
  • Mặc dù có thể tạo trình kích hoạt bằng tài khoản DEFINER không tồn tại, nhưng không nên kích hoạt các trình kích hoạt đó cho đến khi tài khoản thực sự tồn tại. Mặt khác, hành vi liên quan đến kiểm tra đặc quyền không được xác định

trigger_name. Tất cả trình kích hoạt phải có tên duy nhất trong lược đồ. Trình kích hoạt trong các lược đồ khác nhau có thể có cùng tên

thời gian kích hoạt. trigger_time là thời gian hành động kích hoạt. Nó có thể là TRƯỚC hoặc SAU KHI cho biết trình kích hoạt kích hoạt trước hoặc sau mỗi hàng được sửa đổi

trigger_event. trigger_event cho biết loại hoạt động kích hoạt trình kích hoạt. Các giá trị trigger_event này được cho phép

  • Kích hoạt kích hoạt bất cứ khi nào một hàng mới được chèn vào bảng;
  • Kích hoạt kích hoạt bất cứ khi nào một hàng được sửa đổi;
  • Kích hoạt kích hoạt bất cứ khi nào một hàng bị xóa khỏi bảng; . Các câu lệnh DROP TABLE và TRUNCATE TABLE trên bảng không kích hoạt trình kích hoạt này vì chúng không sử dụng DELETE. Bỏ một phân vùng cũng không kích hoạt trình kích hoạt XÓA

tbl_name. Trình kích hoạt được liên kết với bảng có tên tbl_name, bảng này phải tham chiếu đến một bảng cố định. Bạn không thể liên kết trình kích hoạt với bảng TẠM THỜI hoặc chế độ xem

trigger_body. trigger_body là câu lệnh sẽ thực thi khi trigger kích hoạt. Để thực thi nhiều câu lệnh, hãy sử dụng lệnh BEGIN. Cấu trúc câu lệnh ghép END. Điều này cũng cho phép bạn sử dụng các câu lệnh tương tự được phép trong các thủ tục được lưu trữ

Đây là một ví dụ đơn giản

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)

Trong ví dụ trên, có từ khóa mới 'MỚI' là phần mở rộng của MySQL để kích hoạt. Có hai phần mở rộng MySQL để kích hoạt 'OLD' và 'NEW'. OLD và NEW không phân biệt chữ hoa chữ thường

  • Trong nội dung trình kích hoạt, các từ khóa CŨ và MỚI cho phép bạn truy cập các cột trong các hàng bị ảnh hưởng bởi trình kích hoạt
  • Trong trình kích hoạt INSERT, chỉ MỚI. col_name có thể được sử dụng
  • Trong trình kích hoạt CẬP NHẬT, bạn có thể sử dụng CŨ. col_name để chỉ các cột của một hàng trước khi nó được cập nhật và MỚI. col_name để chỉ các cột của hàng sau khi nó được cập nhật
  • Trong trình kích hoạt XÓA, chỉ CŨ. col_name có thể được sử dụng;

Cột có tên OLD chỉ được đọc. Bạn có thể tham khảo nó (nếu bạn có quyền CHỌN), nhưng không được sửa đổi nó. Bạn có thể tham khảo một cột có tên MỚI nếu bạn có đặc quyền CHỌN cho cột đó. Trong trình kích hoạt TRƯỚC, bạn cũng có thể thay đổi giá trị của nó bằng SET NEW. col_name = value nếu bạn có đặc quyền CẬP NHẬT cho nó. Điều này có nghĩa là bạn có thể sử dụng trình kích hoạt để sửa đổi các giá trị sẽ được chèn vào một hàng mới hoặc được sử dụng để cập nhật một hàng. (Câu lệnh SET như vậy không có tác dụng trong trình kích hoạt SAU vì thay đổi hàng đã xảy ra rồi. )

Cơ sở dữ liệu mẫu, bảng, cấu trúc bảng, bản ghi bảng cho các ví dụ khác nhau

Tên cơ sở dữ liệu. giờ
Tên máy chủ. máy chủ cục bộ
người dùng cơ sở dữ liệu. nguồn gốc
Mật khẩu. ''

Cấu trúc của bảng. emp_details

Kích hoạt XÓA MySQL

Bản ghi của bảng (trên một số trường). emp_details

mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;
+-------------+------------+-----------+---------+----------+----------------+ | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID | SALARY | COMMISSION_PCT | +-------------+------------+-----------+---------+----------+----------------+ | 100 | Steven | King | AD_PRES | 24000.00 | 0.10 | | 101 | Neena | Kochhar | AD_VP | 17000.00 | 0.50 | | 102 | Lex | De Haan | AD_VP | 17000.00 | 0.50 | | 103 | Alexander | Hunold | IT_PROG | 9000.00 | 0.25 | | 104 | Bruce | Ernst | IT_PROG | 6000.00 | 0.25 | | 105 | David | Austin | IT_PROG | 4800.00 | 0.25 | +-------------+------------+-----------+---------+----------+----------------+
6 rows in set (0.00 sec)

Công cụ tạo MySQL Triggers

Bạn có thể viết một thủ tục trong công cụ dòng lệnh của MySQL hoặc bạn có thể sử dụng MySQL workbench, một công cụ giao diện người dùng tuyệt vời (ở đây chúng tôi đã sử dụng phiên bản 5. 3 CN)

Công cụ dòng lệnh MySQL. -

Chọn Máy khách lệnh MySQL từ menu Bắt đầu

Kích hoạt XÓA MySQL

Chọn dấu nhắc lệnh MySQL màn hình sau sẽ đến

Kích hoạt XÓA MySQL

Sau khi đăng nhập thành công, bạn có thể truy cập dấu nhắc lệnh của MySQL

Kích hoạt XÓA MySQL

Bây giờ bạn có thể viết trình kích hoạt của riêng mình trên một bảng cụ thể, hãy xem ví dụ sau

Kích hoạt XÓA MySQL

Bàn làm việc MySQL (5. 3 CN). -

Chọn bàn làm việc MySQL từ menu Bắt đầu

Kích hoạt XÓA MySQL

Sau khi chọn bàn làm việc của MySQL, màn hình đăng nhập sau sẽ đến

Kích hoạt XÓA MySQL

Bây giờ hãy nhập chi tiết đăng nhập

Kích hoạt XÓA MySQL

Sau khi đăng nhập thành công, một màn hình mới sẽ xuất hiện và từ bảng trình duyệt đối tượng, hãy chọn cơ sở dữ liệu

Kích hoạt XÓA MySQL

Sau khi chọn cơ sở dữ liệu, chọn các bảng

Kích hoạt XÓA MySQL

Bây giờ, nhấp chuột phải vào emp_details, một cửa sổ bật lên, nhấp vào Bảng thay đổi

Kích hoạt XÓA MySQL

Click vào " Alter Table " chi tiết của emp_details sẽ đến

Kích hoạt XÓA MySQL

Bây giờ hãy nhấp vào tab Kích hoạt trong phần trước, sau đó chọn Thời gian/Sự kiện có thể là SAU KHI XÓA, SAU KHI CHÈN, SAU CẬP NHẬT hoặc TRƯỚC XÓA, TRƯỚC CHÈN HOẶC TRƯỚC CẬP NHẬT. Ta chọn SAU KHI CHÈN, bạn cũng để ý có nút Add Trigger

Kích hoạt XÓA MySQL

Nhấp vào nút Thêm kích hoạt, mã mặc định trên trình kích hoạt sẽ xuất hiện trên cơ sở chọn Thời gian/Sự kiện

Kích hoạt XÓA MySQL

Tên kích hoạt. emp_details_AINS
Chi tiết mã kích hoạt mặc định

USE `hr`;
DELIMITER 
$$
CREATE TRIGGER `emp_details_AINS` 
AFTER INSERT 
ON emp_details FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one

Sau khi hoàn thành mã, nhấp vào nút áp dụng

Ghi chú. Xem văn bản mới Xóa Trình kích hoạt đã xuất hiện trong Thêm nút Kích hoạt. Nhấp vào đây bạn có thể xóa trình kích hoạt

Cuối cùng, bạn có thể xem lại tập lệnh một lần nữa, vì không có lỗi, hãy nhấp vào nút Áp dụng

Kích hoạt XÓA MySQL

Đây là cửa sổ cuối cùng trước khi kết thúc. Hãy nhấp vào nút Kết thúc

Kích hoạt XÓA MySQL

Nếu bạn xem lược đồ, bạn sẽ thấy trình kích hoạt emp_details_AINS bên dưới bảng emp_details như sau

Kích hoạt XÓA MySQL

Trình kích hoạt MySQL. Ví dụ SAU KHI CHÈN

Trong ví dụ sau, chúng ta có hai bảng. emp_details và log_emp_details. Để chèn một số thông tin vào bảng log_ emp_details (có ba trường id nhân viên, lương và edttime), khi một INSERT xảy ra trong bảng emp_details, chúng tôi đã sử dụng trình kích hoạt sau

DELIMITER 
$$
USE `hr`
$$
CREATE 
DEFINER=`root`@`127.0.0.1` 
TRIGGER `hr`.`emp_details_AINS` 
AFTER INSERT ON `hr`.`emp_details`
FOR EACH ROW
-- Edit trigger body code below this line. Do not edit lines above this one
BEGIN 
INSERT INTO log_emp_details 
VALUES(NEW.employee_id, NEW.salary, NOW());
END$$

Bản ghi của bảng (trên một số cột). emp_details

mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;
+-------------+------------+-----------+---------+----------+----------------+
| EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID  | SALARY   | COMMISSION_PCT |
+-------------+------------+-----------+---------+----------+----------------+
|         100 | Steven     | King      | AD_PRES | 24000.00 |           0.10 |
|         101 | Neena      | Kochhar   | AD_VP   | 17000.00 |           0.50 |
|         102 | Lex        | De Haan   | AD_VP   | 17000.00 |           0.50 |
|         103 | Alexander  | Hunold    | IT_PROG |  9000.00 |           0.25 |
|         104 | Bruce      | Ernst     | IT_PROG |  6000.00 |           0.25 |
|         105 | David      | Austin    | IT_PROG |  4800.00 |           0.25 |
+-------------+------------+-----------+---------+----------+----------------+
6 rows in set (0.00 sec)

Bản ghi của bảng (tất cả các cột). log_emp_details

mysql> SELECT * FROM log_emp_details;
+-------------+----------+---------------------+
| emp_details | SALARY   | EDTTIME             |
+-------------+----------+---------------------+
|         100 | 24000.00 | 2011-01-15 00:00:00 |
|         101 | 17000.00 | 2010-01-12 00:00:00 |
|         102 | 17000.00 | 2010-09-22 00:00:00 |
|         103 |  9000.00 | 2011-06-21 00:00:00 |
|         104 |  6000.00 | 2012-07-05 00:00:00 |
|         105 |  4800.00 | 2011-06-21 00:00:00 |
+-------------+----------+---------------------+
6 rows in set (0.02 sec)

Bây giờ hãy chèn một bản ghi vào bảng emp_details để xem các bản ghi ở cả hai bảng emp_details và log_emp_details

mysql> INSERT INTO emp_details VALUES(236, 'RABI', 'CHANDRA', 'RABI','590.423.45700', '2013-01-12', 'AD_VP', 15000, .5);
Query OK, 1 row affected (0.07 sec)
mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;
+-------------+------------+-----------+---------+----------+----------------+
| EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID  | SALARY   | COMMISSION_PCT |
+-------------+------------+-----------+---------+----------+----------------+
|         100 | Steven     | King      | AD_PRES | 24000.00 |           0.10 |
|         101 | Neena      | Kochhar   | AD_VP   | 17000.00 |           0.50 |
|         102 | Lex        | De Haan   | AD_VP   | 17000.00 |           0.50 |
|         103 | Alexander  | Hunold    | IT_PROG |  9000.00 |           0.25 |
|         104 | Bruce      | Ernst     | IT_PROG |  6000.00 |           0.25 |
|         105 | David      | Austin    | IT_PROG |  4800.00 |           0.25 |
|         236 | RABI       | CHANDRA   | AD_VP   | 15000.00 |           0.50 |
+-------------+------------+-----------+---------+----------+----------------+
7 rows in set (0.00 sec)
mysql> SELECT * FROM log_emp_details;
+-------------+----------+---------------------+
| emp_details | SALARY   | EDTTIME             |
+-------------+----------+---------------------+
|         100 | 24000.00 | 2011-01-15 00:00:00 |
|         101 | 17000.00 | 2010-01-12 00:00:00 |
|         102 | 17000.00 | 2010-09-22 00:00:00 |
|         103 |  9000.00 | 2011-06-21 00:00:00 |
|         104 |  6000.00 | 2012-07-05 00:00:00 |
|         105 |  4800.00 | 2011-06-21 00:00:00 |
|         236 | 15000.00 | 2013-07-15 16:52:24 |
+-------------+----------+---------------------+
7 rows in set (0.00 sec)

Trình kích hoạt MySQL. Ví dụ TRƯỚC KHI CHÈN

Trong ví dụ sau, trước khi chèn bản ghi mới vào bảng emp_details, trình kích hoạt sẽ kiểm tra giá trị cột của FIRST_NAME, LAST_NAME, JOB_ID và
- Nếu có bất kỳ khoảng trắng nào trước hoặc sau hàm FIRST_NAME, LAST_NAME, TRIM() sẽ xóa chúng
- Giá trị của JOB_ID sẽ được chuyển thành chữ hoa bằng hàm UPPER()

Đây là mã kích hoạt

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
0Bây giờ hãy chèn một hàng vào bảng emp_details (kiểm tra các cột FIRST_NAME, LAST_NAME, JOB_ID).
mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
1

Bây giờ hãy liệt kê các trường sau của emp_details

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
2

Xem hàng cuối cùng

FIRST_NAME -> ' Ana ' đã đổi thành 'Ana'
LAST_NAME -> 'King' đã đổi thành 'King'
JOB_ID -> 'it_prog' đã đổi thành 'IT_PROG'

Trình kích hoạt MySQL. Ví dụ SAU KHI CẬP NHẬT

Chúng tôi có hai bảng student_mast và stu_log. student_mast có ba cột STUDENT_ID, NAME, ST_CLASS. bảng stu_log có hai cột user_id và description

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
3

Hãy để chúng tôi quảng bá tất cả các sinh viên trong lớp tiếp theo tôi. e. 7 sẽ là 8, 8 sẽ là 9, v.v. Sau khi cập nhật một hàng trong bảng student_mast, một hàng mới sẽ được chèn vào bảng stu_log nơi chúng tôi sẽ lưu trữ id người dùng hiện tại và một mô tả nhỏ về bản cập nhật hiện tại. Đây là mã kích hoạt

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
4

Sau khi cập nhật bảng STUDENT_MAST

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
5

Trình kích hoạt hiển thị cho bạn các bản ghi được cập nhật trong 'stu_log'. Đây là vị trí mới nhất của bảng STUDENT_MAST và STU_LOG

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
6

Trình kích hoạt MySQL. Ví dụ TRƯỚC KHI CẬP NHẬT

Chúng tôi có một bảng student_marks với 10 cột và 4 hàng. Chỉ có dữ liệu trong cột STUDENT_ID và NAME

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
7

Bây giờ kỳ thi đã kết thúc và chúng tôi đã nhận được tất cả các điểm môn học, bây giờ chúng tôi sẽ cập nhật bảng, tổng điểm của tất cả các môn học, tỷ lệ phần trăm của tổng điểm và điểm sẽ được tính tự động. Đối với phép tính mẫu này, các điều kiện sau được giả định

Tổng số điểm (sẽ được lưu trong cột TOTAL). TỔNG = SUB1 + SUB2 + SUB3 + SUB4 + SUB5

Phần trăm Điểm (sẽ được lưu trữ trong cột PER_MARKS). PER_MARKS = (TOTAL)/5

Điểm (sẽ được lưu cột LỚP)
- Nếu PER_MARKS>=90 -> 'TUYỆT VỜI'
- If PER_MARKS>=75 AND PER_MARKS<90 -> 'VERY GOOD'
- If PER_MARKS>=60 AND PER_MARKS<75 -> 'GOOD'
- If PER_MARKS>=40 AND PER_MARKS<60 -> 'AVERAGE'
- If PER_MARKS<40-> 'NOT PROMOTED'

Đây là mã

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
8

Hãy cập nhật điểm của một sinh viên

mysql> CREATE TRIGGER ins_sum BEFORE INSERT ON account
    -> FOR EACH ROW SET @sum = @sum + NEW.amount;
Query OK, 0 rows affected (0.06 sec)
9

Bây giờ hãy kiểm tra bảng STUDENT_MARKS với dữ liệu được cập nhật. Trình kích hoạt hiển thị cho bạn các bản ghi được cập nhật trong 'stu_log'

mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;
+-------------+------------+-----------+---------+----------+----------------+ | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID | SALARY | COMMISSION_PCT | +-------------+------------+-----------+---------+----------+----------------+ | 100 | Steven | King | AD_PRES | 24000.00 | 0.10 | | 101 | Neena | Kochhar | AD_VP | 17000.00 | 0.50 | | 102 | Lex | De Haan | AD_VP | 17000.00 | 0.50 | | 103 | Alexander | Hunold | IT_PROG | 9000.00 | 0.25 | | 104 | Bruce | Ernst | IT_PROG | 6000.00 | 0.25 | | 105 | David | Austin | IT_PROG | 4800.00 | 0.25 | +-------------+------------+-----------+---------+----------+----------------+
6 rows in set (0.00 sec)
0

Trình kích hoạt MySQL. Ví dụ SAU KHI XÓA

Trong ví dụ 'SAU KHI CẬP NHẬT', chúng tôi có hai bảng student_mast và stu_log. student_mast có ba cột STUDENT_ID, NAME, ST_CLASS và bảng stu_log có hai cột user_id và description. Chúng tôi muốn lưu trữ một số thông tin trong bảng stu_log sau khi thao tác xóa xảy ra trên bảng student_mast. Đây là kích hoạt

mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;
+-------------+------------+-----------+---------+----------+----------------+ | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID | SALARY | COMMISSION_PCT | +-------------+------------+-----------+---------+----------+----------------+ | 100 | Steven | King | AD_PRES | 24000.00 | 0.10 | | 101 | Neena | Kochhar | AD_VP | 17000.00 | 0.50 | | 102 | Lex | De Haan | AD_VP | 17000.00 | 0.50 | | 103 | Alexander | Hunold | IT_PROG | 9000.00 | 0.25 | | 104 | Bruce | Ernst | IT_PROG | 6000.00 | 0.25 | | 105 | David | Austin | IT_PROG | 4800.00 | 0.25 | +-------------+------------+-----------+---------+----------+----------------+
6 rows in set (0.00 sec)
1

Cho phép xóa một sinh viên khỏi STUDENT_MAST

mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;
+-------------+------------+-----------+---------+----------+----------------+ | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID | SALARY | COMMISSION_PCT | +-------------+------------+-----------+---------+----------+----------------+ | 100 | Steven | King | AD_PRES | 24000.00 | 0.10 | | 101 | Neena | Kochhar | AD_VP | 17000.00 | 0.50 | | 102 | Lex | De Haan | AD_VP | 17000.00 | 0.50 | | 103 | Alexander | Hunold | IT_PROG | 9000.00 | 0.25 | | 104 | Bruce | Ernst | IT_PROG | 6000.00 | 0.25 | | 105 | David | Austin | IT_PROG | 4800.00 | 0.25 | +-------------+------------+-----------+---------+----------+----------------+
6 rows in set (0.00 sec)
2

Đây là vị trí mới nhất của các bảng STUDENT_MAST, STU_LOG

mysql> SELECT EMPLOYEE_ID, FIRST_NAME, LAST_NAME, JOB_ID, SALARY, COMMISSION_PCT FROM emp_details;
+-------------+------------+-----------+---------+----------+----------------+ | EMPLOYEE_ID | FIRST_NAME | LAST_NAME | JOB_ID | SALARY | COMMISSION_PCT | +-------------+------------+-----------+---------+----------+----------------+ | 100 | Steven | King | AD_PRES | 24000.00 | 0.10 | | 101 | Neena | Kochhar | AD_VP | 17000.00 | 0.50 | | 102 | Lex | De Haan | AD_VP | 17000.00 | 0.50 | | 103 | Alexander | Hunold | IT_PROG | 9000.00 | 0.25 | | 104 | Bruce | Ernst | IT_PROG | 6000.00 | 0.25 | | 105 | David | Austin | IT_PROG | 4800.00 | 0.25 | +-------------+------------+-----------+---------+----------+----------------+
6 rows in set (0.00 sec)
3

MySQL xử lý lỗi như thế nào trong quá trình thực thi kích hoạt?

  • Nếu kích hoạt TRƯỚC không thành công, thao tác trên hàng tương ứng không được thực hiện
  • Trình kích hoạt TRƯỚC được kích hoạt khi cố gắng chèn hoặc sửa đổi hàng, bất kể lần thử sau đó có thành công hay không
  • Trình kích hoạt SAU chỉ được thực thi nếu bất kỳ trình kích hoạt TRƯỚC nào và thao tác hàng thực hiện thành công
  • Một lỗi trong quá trình kích hoạt TRƯỚC hoặc SAU KHI dẫn đến lỗi của toàn bộ câu lệnh gây ra lệnh kích hoạt
  • Đối với các bảng giao dịch, lỗi của một câu lệnh sẽ gây ra sự khôi phục tất cả các thay đổi được thực hiện bởi câu lệnh

Xóa trình kích hoạt MySQL

Để xóa hoặc hủy kích hoạt, hãy sử dụng câu lệnh DROP TRIGGER. Bạn phải chỉ định tên lược đồ nếu trình kích hoạt không có trong lược đồ (hiện tại) mặc định

Làm cách nào để tạo trình kích hoạt để xóa trong MySQL?

Trình kích hoạt MySQL SAU KHI XÓA được tự động gọi sau khi xảy ra sự kiện xóa trên bảng. Trong cú pháp này. Đầu tiên, chỉ định tên của trình kích hoạt mà bạn muốn tạo trong mệnh đề CREATE TRIGGER. Thứ hai, sử dụng mệnh đề SAU KHI XÓA để chỉ định thời gian gọi trình kích hoạt .

Làm cách nào để sử dụng trình kích hoạt xóa trong SQL?

Sử dụng SQL Server Management Studio . Mở rộng Trình kích hoạt, nhấp chuột phải vào trình kích hoạt để xóa rồi nhấp vào Xóa . Trong hộp thoại Xóa đối tượng, xác minh trình kích hoạt để xóa, sau đó bấm OK.

Là sau khi xóa kích hoạt?

Kích hoạt sau khi xóa Salesforce thực thi logic tùy chỉnh sau khi dữ liệu bị xóa khỏi Cơ sở dữ liệu Salesforce . Nếu muốn xóa các bản ghi liên quan, bạn có thể sử dụng Trigger After Delete Salesforce.

Làm cách nào để xóa dữ liệu trong MySQL?

Cú pháp XÓA . Cẩn thận khi xóa bản ghi trong bảng. Lưu ý mệnh đề WHERE trong câu lệnh DELETE. Mệnh đề WHERE chỉ định (những) bản ghi nào sẽ bị xóa. DELETE FROM table_name WHERE condition; Note: Be careful when deleting records in a table! Notice the WHERE clause in the DELETE statement. The WHERE clause specifies which record(s) should be deleted.