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 Show nội dung Sử dụng cho kích hoạt
Lợi ích của việc sử dụng trigger trong kinh doanh
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
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()
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
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
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ờ Cấu trúc của bảng. emp_details 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; 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 Chọn dấu nhắc lệnh MySQL màn hình sau sẽ đến 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 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 Bàn làm việc MySQL (5. 3 CN). - Chọn bàn làm việc MySQL từ menu Bắt đầu Sau khi chọn bàn làm việc của MySQL, màn hình đăng nhập sau sẽ đến Bây giờ hãy nhập chi tiết đăng nhập 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 Sau khi chọn cơ sở dữ liệu, chọn các bảng 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 Click vào " Alter Table " chi tiết của emp_details sẽ đến 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 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 Tên kích hoạt. emp_details_AINS 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 Đâ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 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 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à 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' 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 Đâ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;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;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;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;3 MySQL xử lý lỗi như thế nào trong quá trình thực thi kích hoạt?
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. |