Tin tức và phân tích của tất cả các thiết bị di động

Trình kích hoạt SQL: Hướng dẫn cơ bản

Trình kích hoạt là các thực thể cơ sở dữ liệu trong SQL Server. Về mặt kỹ thuật, chúng là một lớp gọi hàm đặc biệt đáp ứng các thao tác cơ sở dữ liệu cụ thể.

Hướng dẫn bắt buộc phải có này cung cấp thông tin chi tiết về trình kích hoạt SQL có thể rất hữu ích trong nghề nghiệp của bạn. Hãy bắt đầu!

Trình kích hoạt SQL là gì?

Từ “kích hoạt” mô tả câu lệnh mà máy chủ tự động thực hiện truy vấn bất cứ khi nào nội dung của cơ sở dữ liệu thay đổi.

Trình kích hoạt là một nhóm các truy vấn SQL có tên đặc biệt được lưu trữ trong không gian bộ nhớ. Đây là một kiểu gọi hàm cụ thể được gọi ngay lập tức bất cứ khi nào có bất kỳ sự kiện nào xảy ra trong cơ sở dữ liệu. Mỗi trình kích hoạt có một bảng được liên kết với nó.

Ví dụ: trình kích hoạt có thể kích hoạt bất cứ khi nào một cột mới được thêm vào một bảng cụ thể hoặc khi một số bản ghi nhất định bị thay đổi.

Theo Microsoft Developer Network, trình kích hoạt là một loại thủ tục được lưu trữ đặc biệt. Trong câu lệnh kích hoạt, chúng tôi xác định trước thời điểm kích hoạt sẽ kích hoạt và sau đó chỉ định hành động sẽ được thực hiện khi kích hoạt được kích hoạt.

Cú pháp:

CREATE TRIGGER trigger_name
BEFORE/AFTER
INSERT/UPDATE/DELETE
ON tableName
FOR EACH ROW SET operation [trigger_body];

Giải thích từng thông số

  • TẠO TRIGGER trigger_name – Được sử dụng để tạo trình kích hoạt hoặc đổi tên trình kích hoạt hiện có.
  • TRƯỚC/SAU – Truy vấn này được sử dụng để chỉ định thời gian thực hiện trình kích hoạt (trước hoặc sau một sự kiện cụ thể).
  • INSERT/UPDATE/DELETE – Mô tả hành động mà chúng ta muốn thực hiện trên các bảng.
  • ON tên bảng – Ở đây chúng tôi xác định tên bảng để định cấu hình trình kích hoạt.
  • CHO MỖI HÀNG – Câu lệnh này đề cập đến một bộ kích hoạt hàng, có nghĩa là các bộ kích hoạt sẽ được thực hiện sau mỗi lần thay đổi hàng.
  • trigger_body – chỉ định hành động sẽ được thực hiện khi kích hoạt trình kích hoạt.

Trình kích hoạt là các chức năng được lưu trữ với các đặc điểm nhận dạng đặc biệt cho phép chúng tôi sử dụng lại các truy vấn đã được thực thi và lưu trữ an toàn trong bộ nhớ. Bây giờ hãy cố gắng hiểu tại sao SQL cần chúng.

Trình kích hoạt được sử dụng phổ biến nhất để điều chỉnh việc triển khai mã bất cứ khi nào một sự kiện xảy ra. Nói cách khác, sử dụng trình kích hoạt là một lựa chọn lý tưởng nếu bạn muốn một đoạn mã cụ thể chạy liên tục để phản hồi một sự kiện cụ thể.

Dưới đây là một số ưu điểm của việc sử dụng trình kích hoạt trong các hoạt động của cơ sở dữ liệu SQL.

  • Thực hiện kiểm tra bổ sung khi chèn, cập nhật hoặc xóa dữ liệu khỏi bảng bị ảnh hưởng.
  • Nó làm giảm thời gian phản hồi, giúp tăng chi phí tính toán.
  • Cho phép mã hóa các tham số mặc định nâng cao không khả dụng do các hạn chế ban đầu.
  • Tính toàn vẹn tham chiếu là một thuộc tính cốt lõi của các hệ thống cơ sở dữ liệu quan hệ. Điều này có nghĩa là dữ liệu được lưu trữ trong hệ thống cơ sở dữ liệu phải luôn chính xác cho mọi giao dịch và mọi hoạt động.

    Nếu hai bảng nằm trong cơ sở dữ liệu hoặc hệ thống riêng biệt, không có cách nào để đảm bảo rằng dữ liệu trong chúng được xác thực bằng các ràng buộc. Trong tình huống này, trình kích hoạt là tùy chọn duy nhất để thực thi.

    Kết hợp các đối số kích hoạt

    Đối với mỗi bảng, chúng tôi có thể chỉ định sáu loại trình kích hoạt khác nhau. Đây là sự kết hợp của các đối số kích hoạt có trong trình kích hoạt cấp hàng SQL.

    TRƯỚC KHI CHÈN: Các trình kích hoạt này thực hiện một hành động trên các hàng trước khi bất kỳ thao tác CHÈN nào được thực hiện trên bảng hoặc cơ sở dữ liệu đã chỉ định.

    SAU KHI CHÈN: Thực hiện một hành động trên các hàng ngay sau mỗi hành động CHÈN trong cơ sở dữ liệu.

    TRƯỚC KHI CẬP NHẬT: Đối với các trình kích hoạt này, chức năng hàng được thực thi trước khi hành động CẬP NHẬT được thực hiện trên cơ sở dữ liệu.

    SAU KHI CẬP NHẬT: Thực hiện một hành động trên các hàng ngay sau bất kỳ cơ sở dữ liệu nào hoặc hoạt động CẬP NHẬT được chỉ định trên một bảng.

    TRƯỚC KHI XÓA: Thực hiện thao tác hàng đã chỉ định ngay cả trước khi cơ sở dữ liệu hoặc bảng bị XÓA.

    SAU KHI XÓA: Các trình kích hoạt này thực hiện một hành động trên các hàng sau mỗi giao dịch XÓA.

    Các loại trình kích hoạt SQL

    Trình kích hoạt SQL là các hàm được lưu trữ chạy ngay lập tức khi một số sự kiện nhất định xảy ra. Nó giống như lập lịch trình theo sự kiện. Các tình huống tiếp theo có thể bắt đầu thực hiện kích hoạt.

    Trình kích hoạt DML – DML là viết tắt của Ngôn ngữ thao tác dữ liệu. Việc thực thi mã để đáp ứng với sửa đổi dữ liệu được kích hoạt bởi Trình kích hoạt DML. Trình kích hoạt này được kích hoạt khi các lệnh DML như INSERT, UPDATE và DELETE được thực thi. Chúng còn được gọi là “trình kích hoạt mức bảng”.

    Trình kích hoạt DDL – DDL là viết tắt của Ngôn ngữ định nghĩa dữ liệu. Trình kích hoạt DDL cho phép chúng tôi chạy mã để đáp ứng với các thay đổi lược đồ cơ sở dữ liệu, chẳng hạn như thêm hoặc xóa bảng hoặc sự kiện máy chủ, chẳng hạn như khi người dùng đăng ký. Chúng được gọi là “Trình kích hoạt cấp cơ sở dữ liệu”.

    Các trình kích hoạt này có thể được kích hoạt khi các câu lệnh DDL cụ thể như CREATE, ALTER hoặc DROP được thực thi trong cơ sở dữ liệu đang hoạt động. Chúng cũng có thể được sử dụng để theo dõi và quản lý các hoạt động của bạn.

    Trình kích hoạt ĐĂNG NHẬP – Bất cứ khi nào xảy ra bất kỳ sự kiện ĐĂNG NHẬP nào (khởi động, đăng nhập, đăng xuất, tắt máy), trình kích hoạt đăng nhập sẽ được kích hoạt ngay lập tức. Chúng chỉ được thực hiện sau quá trình xác thực của người dùng, ngay cả trước khi giao dịch của người dùng được bắt đầu. Trình kích hoạt ĐĂNG NHẬP sẽ không kích hoạt nếu ủy quyền không thành công.

    Các trình kích hoạt này có thể được sử dụng để ghi lại lịch sử đăng nhập hoặc đặt giới hạn sự kiện cho một lần đăng nhập cụ thể, cũng như các chức năng quản lý danh tính và kiểm tra khác cho các kết nối máy chủ.

    Kích hoạt CLR – CLR là viết tắt của thời gian chạy ngôn ngữ chung. Trình kích hoạt CLR thực sự là một tập hợp con duy nhất của trình kích hoạt được xây dựng chủ yếu trên CLR trong công nghệ .NET. Các trình kích hoạt này hữu ích nếu trình kích hoạt cần thực hiện nhiều phép tính hoặc cần tham chiếu đến một thực thể không phải SQL.

    Trình kích hoạt DML và DDL thực sự có thể được xây dựng bằng cách mã hóa trình kích hoạt CLR được hỗ trợ trong các công nghệ .NET, bao gồm Visual Basic, C# và F-sharp.

    Ví dụ trình kích hoạt máy chủ SQL

    Chúng tôi hiểu các khái niệm kích hoạt này bằng một ví dụ.

    Đầu tiên, hãy tạo một cơ sở dữ liệu bằng các câu lệnh SQL.

    CREATE DATABASE testdb;
    use testdb;

    Ở đây tôi đã đặt tên cơ sở dữ liệu là “testdb”. Bước tiếp theo là tạo bảng.

    CREATE TABLE student(
      name varchar(25),
      id int(2),
      maths int(2),
      physics int(2),
      biology int(2),
      social int(2),
      total int(2)
     );

    Tôi đã tạo một bảng để lưu trữ dữ liệu sinh viên. Và đây là lệnh mô tả cấu trúc của bảng. Ở đây “sinh viên” là tên bảng tôi đã cung cấp.

    DESC student;

    Dưới đây là cấu trúc của bảng tôi đã tạo.

    +---------+-------------+------+-----+---------+-------+
    | Field   | Type        | Null | Key | Default | Extra |
    +---------+-------------+------+-----+---------+-------+
    | name    | varchar(25) | YES  |     | NULL    |       |
    | id      | int         | YES  |     | NULL    |       |
    | maths   | int         | YES  |     | NULL    |       |
    | physics | int         | YES  |     | NULL    |       |
    | biology | int         | YES  |     | NULL    |       |
    | social  | int         | YES  |     | NULL    |       |
    | total   | int         | YES  |     | NULL    |       |
    +---------+-------------+------+-----+---------+-------+
    7 rows in set (0.00 sec)

    Sau khi tạo bảng, bước tiếp theo là định cấu hình trình kích hoạt. Hãy thử sử dụng đối số TRƯỚC CHÈN.

    Tên của trình kích hoạt tôi đã tạo là “dấu hiệu”. Ngay sau khi bảng được sửa đổi với điểm của học sinh, trình kích hoạt bên dưới sẽ cố gắng tự động xác định điểm tổng thể của học sinh.

    CREATE TRIGGER marks
    BEFORE INSERT
    ON
    student
    FOR EACH ROW
    set new.total=new.maths+new.physics+new.biology+new.social;

    Vì chúng tôi cần thay thế dữ liệu hàng và không hoạt động với dữ liệu cũ, nên chúng tôi đã xác định “tổng” bằng tên lớp mới và tất cả các biểu thức tiếp theo được thêm tiền tố bằng từ khóa mới sau khi được tóm tắt bằng toán tử dấu chấm. Bây giờ chúng ta sẽ thêm các giá trị vào từng hàng và xem kết quả. Ban đầu tổng điểm của mỗi học sinh là 0.

    INSERT INTO student VALUES("George",02,99,87,92,91,0);
    INSERT INTO student VALUES("James",03,91,81,94,90,0);
    INSERT INTO student VALUES("Harry",04,86,70,73,88,0);
    INSERT INTO student VALUES("John",05,73,89,78,92,0);
    INSERT INTO student VALUES("Lisa",01,94,75,69,79,0);
    

    Trong trường hợp này, câu lệnh kích hoạt sẽ tự động chạy khi dữ liệu được chèn vào bảng sinh viên. Tổng điểm của mỗi học sinh sẽ được tính bằng cò. Bây giờ hãy xem liệu trình kích hoạt có được gọi bằng câu lệnh SELECT hay không.

    SELECT * FROM table_name;

    Và đây là kết quả cuối cùng.

    mysql> select * from student;
    +--------+------+-------+---------+---------+--------+-------+
    | name   | id   | maths | physics | biology | social | total |
    +--------+------+-------+---------+---------+--------+-------+
    | George |    2 |    91 |      81 |      94 |     90 |   356 |
    | James  |    3 |    86 |      70 |      73 |     88 |   317 |
    | Harry  |    4 |    73 |      89 |      78 |     92 |   332 |
    | John   |    5 |    94 |      75 |      69 |     79 |   317 |
    | Lisa   |    1 |    99 |      87 |      92 |     91 |   369 |
    +--------+------+-------+---------+---------+--------+-------+
    5 rows in set (0.00 sec)

    Trong kết quả ở trên, bạn có thể thấy rằng tất cả các điểm môn học được tự động thêm cho mỗi học sinh. Vì vậy, chúng tôi có thể kết luận rằng trình kích hoạt đã được kích hoạt thành công.

    Hoạt động kích hoạt bổ sung

    Chúng ta có thể làm nhiều thứ với trigger. Một số có thể đơn giản và một số khác hơi phức tạp, nhưng khi bạn xem qua các truy vấn, chúng sẽ rất dễ hiểu. Sử dụng câu lệnh Transact-SQL, bạn có thể bật, tắt hoặc xóa trình kích hoạt bằng các lệnh sau.

    Truy vấn để kiểm tra xem có trình kích hoạt được chỉ định hay không

    Lệnh này kiểm tra trình kích hoạt được chỉ định đối với toàn bộ cơ sở dữ liệu.

    SELECT * FROM [sys].[triggers] WHERE [name] = 'Trigger_name'

    Truy vấn để hiển thị trình kích hoạt

    Tất cả các trình kích hoạt có sẵn trong cơ sở dữ liệu đang hoạt động sẽ được hiển thị trong câu lệnh sau.

    SHOW TRIGGERS;

    Truy vấn để tắt trình kích hoạt

    Lệnh sau sẽ hủy kích hoạt trình kích hoạt trên cơ sở dữ liệu đang chạy.

    DISABLE TRIGGER trigger_name ON DATABASE;

    Bạn cũng có thể chỉ định một tên bảng cụ thể để tắt trình kích hoạt.

    DISABLE TRIGGER trigger_name ON table_name;

    Truy vấn để kích hoạt trình kích hoạt

    Trước tiên, lệnh sau sẽ hủy kích hoạt trình kích hoạt đã chỉ định đã được xác định trong bảng đã chỉ định trong cơ sở dữ liệu đang hoạt động trước khi kích hoạt lại.

    ALTER TABLE table_name DISABLE TRIGGER trigger_name
    
    ALTER TABLE table_name ENABLE TRIGGER trigger_name

    Trình kích hoạt phải được tắt trước khi bạn thử kích hoạt nó,

    Truy vấn để bật hoặc tắt tất cả trình kích hoạt trong bảng

    Sử dụng câu lệnh SQL ở trên, chúng ta có thể hủy kích hoạt hoặc kích hoạt tất cả các trình kích hoạt bảng cùng một lúc bằng cách thay thế “TẤT CẢ” thay cho tên trình kích hoạt đã chỉ định.

    ALTER TABLE table_name DISABLE TRIGGER ALL 
    
    ALTER TABLE table_name ENABLE TRIGGER ALL

    Truy vấn để xóa hoặc xóa trình kích hoạt

    Bạn có thể loại bỏ trình kích hoạt bằng cách xóa nó hoặc toàn bộ bảng. Mỗi trình kích hoạt được liên kết cũng bị xóa khi bảng bị xóa.

    DROP TRIGGER [trigger_name];

    Mỗi khi trình kích hoạt bị xóa, dữ liệu liên quan sẽ bị xóa khỏi bảng dữ liệu sys.objects.

    Lợi ích của trigger

    • Việc tạo trình kích hoạt rất đơn giản và bản thân trình kích hoạt có thể gọi các hàm và phương thức được lưu trữ.
    • Người dùng có thể thực hiện kiểm tra đơn giản bằng cách sử dụng trình kích hoạt.
    • Thật không may, bạn không thể tạo các ràng buộc giữa các thực thể trong hệ thống cơ sở dữ liệu với SQL Server, mặc dù bạn có thể mô phỏng các ràng buộc bằng cách sử dụng trình kích hoạt.
    • Các ràng buộc về tính toàn vẹn có thể được triển khai trên các cơ sở dữ liệu bằng cách sử dụng trình kích hoạt.
    • Khi cần xác minh nhóm, thay vì xác minh từng hàng dữ liệu mới được nhập hoặc thay đổi, trình kích hoạt có thể hữu ích.

    Nhược điểm của trigger

    Trình kích hoạt SQL có thể không phải là lựa chọn tốt nhất trong một số trường hợp do những hạn chế của chúng.

    • Kích hoạt phải được ghi lại kỹ lưỡng.
    • Do việc thực thi cơ sở dữ liệu đồng thời có thể không khả dụng đối với các thành phần ứng dụng nên khó gỡ lỗi trình kích hoạt.
    • Các câu lệnh DML trở nên phức tạp hơn khi sử dụng trình kích hoạt.
    • Ngay cả một vấn đề nhỏ với trình kích hoạt cũng có thể dẫn đến các lỗi logic trong câu lệnh.

    Đăng kí

    Trình kích hoạt là các thành phần rất hữu ích của Transact-SQL và SQL và cũng có thể được sử dụng trong Oracle. Việc sử dụng trình kích hoạt là rất quan trọng khi gọi các phương thức được lưu trữ. Các trình kích hoạt SQL này cho phép chúng tôi phân tích các mốc thời gian hoạt động và xác định cách phản ứng với chúng nếu cần. Chúng tôi cũng có thể kiểm tra bảng cụ thể được kết nối với trình kích hoạt để lấy dữ liệu.

    Đệ quy có thể được kích hoạt bằng cách sử dụng trình kích hoạt. Mỗi khi một trình kích hoạt trên bảng thực thi một lệnh trên bảng cha, thì lần lặp thứ hai của trình kích hoạt sẽ được kích hoạt và điều này được gọi là trình kích hoạt đệ quy. Điều này hữu ích khi cố gắng giải quyết các mối tương quan danh tính.

    Ngoài ra, các trình kích hoạt điều chỉnh mẫu cập nhật mà cơ sở dữ liệu có thể chấp nhận. Việc giữ các ràng buộc toàn vẹn dữ liệu trong hệ thống cơ sở dữ liệu là rất có lợi nếu không tồn tại các khóa ràng buộc SQL, chủ yếu là khóa chính và khóa ngoại.

    Tôi hy vọng bạn thấy bài viết này hữu ích khi tìm hiểu về trình kích hoạt SQL.

    Nếu bạn muốn khám phá sâu về cơ sở dữ liệu, đây là một số tài nguyên tuyệt vời để học SQL và NoSQL.