Nếu kích hoạt mysql

Hướng dẫn SQL của chúng tôi sẽ hướng dẫn bạn cách sử dụng SQL trong. MySQL, SQL Server, MS Access, Oracle, Sybase, Informix, Postgres và các hệ thống cơ sở dữ liệu khác

Bắt đầu học SQL ngay bây giờ »

Ví dụ trong mỗi chương

Với trình soạn thảo SQL trực tuyến của chúng tôi, bạn có thể chỉnh sửa câu lệnh SQL và nhấp vào nút để xem kết quả

Trình kích hoạt MySQL là một trong những tính năng mới hơn trong MySQL giúp biến nó thành một giải pháp thay thế khả thi cho các ứng dụng doanh nghiệp lớn. Cách đây không lâu, những người kiếm sống bằng cách sử dụng các cơ sở dữ liệu thương mại lớn như Oracle và DB2 đã chỉ ra rằng MySQL là một cơ sở dữ liệu nhỏ đẹp, nhanh nhưng lại thiếu các tính năng quan trọng như thủ tục lưu trữ, giao dịch và trình kích hoạt. Kể từ phiên bản 5. 0 của MySQL, các tính năng này có thể bị gạch bỏ khỏi danh sách đó

Vậy MySQL triggers là gì và tại sao khả năng sử dụng chúng của MySQL lại khiến nó trở nên hấp dẫn hơn đối với những người dùng cơ sở dữ liệu nghiêm túc?

Nói một cách đơn giản, trình kích hoạt là các chương trình nhỏ được lưu trữ trong chính cơ sở dữ liệu và được kích hoạt bởi các sự kiện cơ sở dữ liệu thường bắt nguồn từ lớp ứng dụng. Các sự kiện cơ sở dữ liệu kết thúc này là các truy vấn CẬP NHẬT, XÓA hoặc CHÈN. Bản thân trình kích hoạt có thể thực thi trước hoặc sau truy vấn khởi tạo nó

Kích hoạt thường được sử dụng để duy trì tính toàn vẹn của dữ liệu trên các bảng của ứng dụng. Ví dụ: khi người dùng trên trang web mua hàng, hành động đầu tiên xảy ra trong cơ sở dữ liệu có thể là một khoản tín dụng được đưa vào bảng kế toán

Bằng cách kích hoạt, hành động này có thể bắt đầu phản ứng dây chuyền của các sự kiện trong các bảng khác trong toàn bộ ứng dụng. Số lượng sản phẩm của một mặt hàng có thể được giảm trong bảng hàng tồn kho, khoản ghi nợ được khấu trừ từ số dư tài khoản của khách hàng trong bảng khác, tín dụng cửa hàng được áp dụng cho bảng khác

Bạn có thể nói rằng bạn đã làm điều này suốt trong các ứng dụng của mình bằng cách sử dụng mã PHP hoặc Perl hoặc Python hoặc ASP. Vấn đề lớn về việc sử dụng trình kích hoạt MySQL là gì? . Trình kích hoạt thường thực hiện các loại tác vụ được mô tả nhanh hơn mã ứng dụng và có thể được kích hoạt dễ dàng và nhanh chóng ở hậu trường và không cần phải là một phần của mã ứng dụng của bạn

Điều này giúp tiết kiệm thời gian và giúp bạn không phải viết mã thừa. Nếu bạn từng chuyển ứng dụng của mình sang một ngôn ngữ khác, rất có thể các trình kích hoạt của bạn có thể giữ nguyên vị trí mà không cần sửa đổi, cùng với các bảng của bạn và các đối tượng cơ sở dữ liệu khác

Để minh họa cách thức hoạt động của trình kích hoạt MySQL, hãy thiết lập hai bảng đơn giản trên cơ sở dữ liệu mà chúng tôi gọi là “sales_records” có dữ liệu phụ thuộc lẫn nhau

Hãy tưởng tượng một cơ sở dữ liệu theo dõi hồ sơ bán hàng của ba nhân viên bán hàng tại một cửa hàng bách hóa. Họ làm việc trong bộ phận điện tử bán những thứ như TV, dàn âm thanh nổi và máy nghe nhạc MP3

Chúng tôi có bảng chính lưu giữ hồ sơ của mỗi lần bán hàng được thực hiện. Nó ghi lại số lượng bán (sale_amt), ngày (date), tên của người bán hàng (tên), số id của anh ta (employee_id) và id sản phẩm (prod_id). Chúng tôi sẽ gọi bảng này (đủ thông minh) là “bán hàng”

Trong bảng thứ hai, chúng tôi muốn giữ lại một số dữ liệu cho phép chúng tôi dễ dàng theo dõi tình hình hoạt động của từng nhân viên bán hàng. Nó sẽ bao gồm id của nhân viên bán hàng (employee_id), tên (name), tổng số lần bán hàng (total_sales) và một cột lưu số tiền trung bình trên mỗi lần bán hàng của mỗi nhân viên bán hàng (ave_sale). Chúng tôi muốn xem ai đang di chuyển các mặt hàng cao cấp. Chúng tôi sẽ gọi bảng này là "hiệu suất"

Bây giờ đến phần khó khăn. Như tôi đã đề cập, trình kích hoạt là đối tượng cơ sở dữ liệu giống như bảng. Tuy nhiên, trình kích hoạt có thể thực thi mã thủ tục để sửa đổi dữ liệu trong bảng của bạn. Trong trường hợp này, chúng tôi muốn trình kích hoạt của mình kích hoạt trước bất kỳ câu lệnh INSERT nào thực thi trong bảng doanh số. Khi một bản ghi bán hàng được chèn vào bảng bán hàng, tổng số của nhân viên bán hàng phải được cập nhật trong bảng hiệu suất

Đoạn mã sau có thể được nhập vào trình soạn thảo văn bản yêu thích của bạn và dán vào konsole của bạn tại dấu nhắc MySQL. Tuy nhiên, trước khi bạn làm điều đó, bạn muốn thực hiện dòng này

mysql. Dấu phân cách $$

Mã thủ tục của chúng tôi sử dụng dấu chấm phẩy ở cuối câu lệnh, vì vậy chúng tôi cần đặt một dấu phân cách khác để cho MySQL biết khi nào khối mã của chúng tôi kết thúc và để nó không dừng xử lý khối của chúng tôi khi nó chạm vào dấu chấm phẩy. Hãy nhớ rằng sau khi bạn hoàn thành khối của mình, bạn sẽ phải đặt dấu phân cách trở lại dấu chấm phẩy hoặc kết thúc mọi lệnh tiếp theo bằng dấu phân cách mới. Ví dụ: nếu bạn mắc lỗi trong khối CREATE TRIGGER và muốn xóa nó, hãy DROP TRIGGER;

Đây là mã cho trình kích hoạt

Nếu kích hoạt mysql

OK, hãy nói về mã. Sử dụng câu lệnh CREATE TRIGGER, chúng tôi đã khởi tạo trình kích hoạt, đặt tên là 'sales_bi_trg'. Trình kích hoạt MySQL có thể kích hoạt trước hoặc sau sự kiện INSERT, UPDATE hoặc DELETE. Cái này kích hoạt trước khi bất kỳ dữ liệu nào được chèn vào bảng 'bán hàng'

Mệnh đề FOR ​​EACH ROW biểu thị rằng khối sẽ hoạt động trên mỗi hàng đáp ứng các tiêu chí của câu lệnh SQL của chúng tôi. Các từ khóa BEGIN và END bao quanh các câu lệnh kích hoạt sẽ thực thi khi kích hoạt kích hoạt

Có hai biến được khai báo. Đầu tiên là 'num_row' để kiểm tra xem nhân viên đã thực hiện giao dịch bán hàng sắp được nhập hay chưa, đã có giao dịch bán hàng nào được nhập vào bảng hiệu suất trước đó chưa. Nếu không có employee_id nào phù hợp, thì đây là lần bán hàng đầu tiên của nhân viên và điều này đáp ứng điều kiện 'KHÔNG CÓ' trong câu lệnh "NẾU" của chúng tôi

Dữ liệu này sẽ được nhập dưới dạng phần chèn trong bảng hiệu suất thay vì cập nhật. Nếu 'num_row' lớn hơn 0 thì bảng hiệu suất sẽ được cập nhật. Biến thứ hai, 'tot_rows', là số lượng bán hàng của nhân viên trong bảng 'doanh số'

Giá trị này được sử dụng để tính doanh số trung bình của nhân viên. Việc đếm đang được thực hiện trước khi việc bán hàng được đưa vào bảng bán hàng, vì vậy chúng tôi phải thêm một vào bảng đó. Khi bảng 'hiệu suất' được cập nhật, doanh số trung bình = tổng_doanh số/(tot_rows+1)

Nếu trình kích hoạt MySQL của chúng tôi hoạt động chính xác, bảng 'hiệu suất' sẽ duy trì tổng doanh số đang chạy của mỗi nhân viên bán hàng, cũng như số tiền trung bình trong tổng doanh số của họ. Nó sẽ thực hiện việc này một cách độc lập với mã ứng dụng của bạn và có thể di động đến bất kỳ nền tảng ứng dụng nào

Để tăng tốc, hãy chèn một số dữ liệu vào bảng 'doanh số' và theo dõi nội dung của bảng 'hiệu suất'. Đây là tuyên bố

Nếu kích hoạt mysql

Thay đổi số và tên và thử một vài lần. (Hãy nhớ rằng, một nhân viên giữ cùng một số employee_id cho mỗi lần bán hàng của mình. ) Nếu bạn thích mạo hiểm, hãy bắt đầu nghĩ về cách trình kích hoạt MySQL sẽ phải được mở rộng để tính đến các câu lệnh CẬP NHẬT và XÓA trên bảng 'bán hàng'