Biến bộ kích hoạt mysql từ chọn
Trình kích hoạt SQL là một đối tượng cơ sở dữ liệu mạnh mẽ khác mà chúng tôi có sẵn. Trong các bài viết trước, chúng tôi đã đề cập đến các hàm do người dùng định nghĩa, các thủ tục do người dùng định nghĩa và Chế độ xem SQL. Hôm nay chúng ta sẽ nói về các trình kích hoạt SQL và cách sử dụng chúng để đạt được hành vi mong muốn Show
Ngươi mâuTrước khi chuyển sang chủ đề của bài viết này, chúng ta hãy xem nhanh mô hình mà chúng tôi đang sử dụng trong bài viết này cũng như trong suốt loạt bài này Trong bài viết này, chúng tôi sẽ tập trung vào trình kích hoạt DML (ngôn ngữ thao tác dữ liệu) và chỉ ra cách chúng hoạt động khi chúng tôi thực hiện các thay đổi trong một bảng Trình kích hoạt SQL là gì?Trong SQL Server, trình kích hoạt là các đối tượng cơ sở dữ liệu, trên thực tế, là một loại thủ tục được lưu trữ đặc biệt, "phản ứng" với một số hành động nhất định mà chúng ta thực hiện trong cơ sở dữ liệu. Ý tưởng chính đằng sau trình kích hoạt là chúng luôn thực hiện một hành động trong trường hợp một số sự kiện xảy ra. Nếu chúng ta đang nói về trình kích hoạt DML, thì những thay đổi này sẽ là những thay đổi trong dữ liệu của chúng ta. Hãy xem xét một vài tình huống thú vị
Từ các ví dụ, bạn có thể nhận thấy rằng các trình kích hoạt DML là các hành động liên quan đến các lệnh SQL được xác định trong các trình kích hoạt này. Vì chúng tương tự như các thủ tục được lưu trữ, bạn có thể kiểm tra các giá trị bằng cách sử dụng câu lệnh IF, v.v. Điều này cung cấp rất nhiều tính linh hoạt Lý do chính đáng để sử dụng trình kích hoạt SQL DML là trường hợp khi bạn muốn đảm bảo rằng một điều khiển nhất định sẽ được thực hiện trước hoặc sau câu lệnh đã xác định trên bảng đã xác định. Đây có thể là trường hợp khi mã của bạn ở khắp mọi nơi, e. g. cơ sở dữ liệu được sử dụng bởi các ứng dụng khác nhau, mã được viết trực tiếp trong các ứng dụng và bạn không có tài liệu đầy đủ về nó Các loại Trình kích hoạt SQLTrong SQL Server, chúng tôi có 3 nhóm trình kích hoạt
Trong bài viết này, chúng tôi sẽ tập trung vào trình kích hoạt DML, vì chúng được sử dụng phổ biến nhất. Chúng tôi sẽ đề cập đến hai loại trình kích hoạt còn lại trong các bài viết tiếp theo của loạt bài này Trình kích hoạt DML – Cú phápCú pháp SQL đơn giản hóa để xác định trình kích hoạt như sau 1 2 3 4 5 TẠO KÍCH HOẠT [schema_name. ]tên_trigger BẬT tên_bảng {CHO . SAU . CÀI ĐẶT HỌC} {[INSERT] [,] [UPDATE] [,] [DELETE]} BẰNG {sql_statements} Hầu hết các cú pháp nên tự giải thích. Ý tưởng chính là xác định
Với suy nghĩ này, chúng ta có thể dễ dàng viết các trình kích hoạt sẽ
Nếu bạn muốn bỏ kích hoạt, bạn sẽ sử dụng 1 DROP KÍCH HOẠT [schema_name. ]tên_kích hoạt; Trình kích hoạt SQL INSERT – Ví dụĐầu tiên, chúng ta sẽ tạo một trình kích hoạt SQL đơn giản sẽ thực hiện kiểm tra trước câu lệnh INSERT 1 2 3 4 5 6 7 8 9 10 11 12 THẢI KÍCH HOẠT NẾU TỒN TẠI t_country_insert; ĐI TẠO KÍCH HOẠT t_country_insert BẬT quốc gia INSTEAD OF INSERT NHƯ BẮT ĐẦU KHAI BÁO @country_name CHAR(128); KHAI BÁO @country_name_eng CHAR(128); KHAI BÁO @mã quốc gia CHAR(8); CHỌN @tên_quốc_gia = country_name, @country_name_eng = country_name_eng, @country_code = country_code FROM INSERTED; NẾU @tên_quốc_gia LÀ NULL SET @country_name = @country_name_eng; IF @country_name_eng IS NULL SET @country_name_eng = @country_name; CHÈN VÀO quốc gia (country_name, country_name_eng, country_code) VALUES (@country_name, @country_name_eng, @country_code); END; Chúng ta có thể thấy trình kích hoạt của mình trong Object Explorer, khi chúng ta mở rộng dữ liệu cho bảng liên quan (quốc gia) Tôi muốn nhấn mạnh một vài điều ở đây
Bây giờ hãy chạy lệnh INSERT INTO và xem điều gì xảy ra trong cơ sở dữ liệu. Chúng tôi sẽ chạy các câu lệnh sau 1 2 3 CHỌN * TỪ quốc gia; CHÈN VÀO quốc gia (tên_quốc_gia, country_code) VALUES ('United Kingdom', 'UK'); CHỌN * TỪ quốc gia; Kết quả là trong hình dưới đây Bạn có thể dễ dàng nhận thấy rằng hàng có id = 10 đã được chèn vào. Chúng tôi chưa chỉ định country_name, nhưng trình kích hoạt đã thực hiện công việc của nó và điền giá trị đó bằng country_name_eng
Kích hoạt SQL DELETE – Ví dụBây giờ, hãy tạo một trình kích hoạt sẽ kích hoạt câu lệnh DELETE trên bảng quốc gia 1 2 3 4 5 6 7 8 9 10 11 12 13 THẢI KÍCH HOẠT NẾU TỒN TẠI t_country_delete; ĐI TẠO KÍCH HOẠT t_country_delete BẬT quốc gia INSTEAD OF DELETE NHƯ BẮT ĐẦU KHAI BÁO @id INT; KHAI BÁO @đếm INT; CHỌN @id = id FROM DELETED; CHỌN @đếm = COUNT(*) FROM city WHERE country_id = @id; NẾU @đếm = 0 XÓA TỪ quốc gia NƠI id = @id; KHÔNG THROW 51000, 'không thể xóa - quốc gia, 1; END; Đối với trình kích hoạt này, cần nhấn mạnh những điều sau
Chạy câu lệnh dưới đây không có lỗi vì quốc gia có id = 6 không có bản ghi liên quan 1 XÓA TỪ quốc gia NƠI id = 6; Nếu chúng tôi chạy câu lệnh này, chúng tôi sẽ thấy thông báo lỗi tùy chỉnh, như trong hình bên dưới 1 XÓA TỪ quốc gia NƠI id = 1; Một thông báo như vậy không chỉ mang tính mô tả mà còn cho phép chúng tôi xử lý lỗi này một cách tốt đẹp và hiển thị một thông báo có ý nghĩa hơn cho người dùng cuối Trình kích hoạt CẬP NHẬT SQLTôi sẽ để lại cái này cho bạn, như một thông lệ. Vì vậy, hãy cố gắng ghi lại trình kích hoạt CẬP NHẬT. Điều quan trọng bạn nên biết là trong trình kích hoạt cập nhật, bạn có thể sử dụng cả hai bản ghi – INSERTED (sau khi cập nhật) và DELETED (trước khi cập nhật). Trong hầu hết các trường hợp, bạn sẽ cần sử dụng cả hai Khi nào nên sử dụng Trình kích hoạt SQL?Trình kích hoạt chia sẻ nhiều điểm chung với các thủ tục được lưu trữ. Tuy nhiên, so với các thủ tục được lưu trữ, chúng bị giới hạn về những gì bạn có thể làm. Do đó, tôi muốn có một quy trình được lưu trữ để chèn/cập nhật/xóa và thực hiện tất cả các kiểm tra và hành động bổ sung ở đó Tuy nhiên, đó không phải lúc nào cũng là lựa chọn. Nếu bạn kế thừa một hệ thống hoặc đơn giản là bạn không muốn đưa tất cả logic vào các thủ tục được lưu trữ, thì trình kích hoạt có thể là giải pháp cho nhiều vấn đề mà bạn có thể gặp phải Làm cách nào để gán giá trị cho biến trong trình kích hoạt SQL?Vậy làm cách nào để gán Giá trị cho biến được khai báo chính? . SELECT CustomerID INTO CustomerId FROM Seller WHERE Id = NEW. GIỚI HẠN ID người bán lại 1 . Nhưng sau khi kích hoạt xong, biến này sẽ bị hủy và giá trị của nó sẽ bị mất.
Chúng ta có thể sử dụng trigger với câu lệnh SELECT không?Sự kiện kích hoạt bắt đầu hành động kích hoạt có thể là một câu lệnh CHÈN, XÓA, CẬP NHẬT hoặc CHỌN . Câu lệnh MERGE cũng có thể là sự kiện kích hoạt cho trình kích hoạt CẬP NHẬT, XÓA hoặc CHÈN.
Làm cách nào để truy cập giá trị mới trong trình kích hoạt MySQL?Đầ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 CẬP NHẬT để chỉ định thời gian gọi trình kích hoạt. Thứ ba, chỉ định tên của bảng mà trình kích hoạt thuộc về sau từ khóa BẬT
Làm cách nào để khai báo và đặt biến trong MySQL?Sau đây, chúng ta sẽ tìm hiểu về biến do người dùng định nghĩa. Chúng ta có thể đặt một số giá trị cho biến với sự trợ giúp của lệnh SET. SET @yourVariableName=value; Lưu ý − Trong câu lệnh SELECT, “yourVariableName” chứa giá trị NULL và sau khi sử dụng lệnh SET, nó chứa giá trị mà . |