Làm cách nào để liệt kê tất cả các trình kích hoạt trong cơ sở dữ liệu MySQL?


100

Lệnh liệt kê tất cả các trình kích hoạt trong cơ sở dữ liệu MySQL là gì?

Câu trả lời:


149

Lệnh để liệt kê tất cả các trình kích hoạt là:

show triggers;

hoặc bạn có thể truy cập INFORMATION_SCHEMAtrực tiếp vào bảng bằng cách:

select trigger_schema, trigger_name, action_statement
from information_schema.triggers
  • Bạn có thể thực hiện việc này từ phiên bản 5.0.10 trở đi.
  • Thông tin thêm về TRIGGERSbảng ở đây .

2
Tôi khuyên bạn nên sử dụng truy vấn "SHOW TRIGGERS" thay vì truy cập trực tiếp vào information_schema - truy vấn sau sẽ rất chậm khi bạn có hơn nghìn cơ sở dữ liệu trên máy chủ trong khi "SHOW TRIGGERS" vẫn có hiệu suất vượt trội.
Martin Tajur

Cảm ơn fpr phiên bản "phức tạp" thứ hai. Đầu tiên không hoạt động (không biết sự thay đổi) trên một trong các máy chủ ...
userlond

3
Lưu ý rằng SHOW TRIGGERSyêu cầu bạn phải có TRIGGERđặc quyền cho cơ sở dữ liệu và bảng đó. Nếu bạn đăng nhập vào MySQL bằng một người dùng không có đặc quyền, việc thực thi SHOW TRIGGERSsẽ không trả lại gì thay vì tạo ra một lỗi. Điều đó có thể gây nhầm lẫn nếu bạn không biết về yêu cầu đặc quyền.
Christopher Schultz

14

Tôi hy vọng mã sau đây sẽ cung cấp cho bạn thêm thông tin.

select * from information_schema.triggers where 
information_schema.triggers.trigger_schema like '%your_db_name%'

Điều này sẽ cung cấp cho bạn tổng số 22 Cột trong phiên bản MySQL: 5.5.27 và Trên

TRIGGER_CATALOG 
TRIGGER_SCHEMA
TRIGGER_NAME
EVENT_MANIPULATION
EVENT_OBJECT_CATALOG
EVENT_OBJECT_SCHEMA 
EVENT_OBJECT_TABLE
ACTION_ORDER
ACTION_CONDITION
ACTION_STATEMENT
ACTION_ORIENTATION
ACTION_TIMING
ACTION_REFERENCE_OLD_TABLE
ACTION_REFERENCE_NEW_TABLE
ACTION_REFERENCE_OLD_ROW
ACTION_REFERENCE_NEW_ROW
CREATED 
SQL_MODE
DEFINER 
CHARACTER_SET_CLIENT
COLLATION_CONNECTION
DATABASE_COLLATION

1
Tôi sẽ tránh sử dụng LIKEkhi xử lý lược đồ. Tôi đã làm việc trong những môi trường mà làm theo cách đó sẽ dễ xảy ra lỗi trong đó khách hàng có một cơ sở dữ liệu tên là "công ty" và một cơ sở dữ liệu khác có tên "company_project". Tôi cũng khuyên bạn nên viết hoa KEYWORDS cho rõ ràng và INFORMATION_SCHEMA và các cột ở đó để rõ ràng là bạn đang không xử lý một DB thông thường.
AndrewWhalan

13

Bạn có thể sử dụng bên dưới để tìm định nghĩa kích hoạt cụ thể.

SHOW TRIGGERS LIKE '%trigger_name%'\G

hoặc bên dưới để hiển thị tất cả các trình kích hoạt trong cơ sở dữ liệu. Nó sẽ hoạt động cho MySQL 5.0 trở lên.

SHOW TRIGGERS\G

9

Để hiển thị một trình kích hoạt cụ thể trong một lược đồ cụ thể, bạn có thể thử những cách sau:

select * from information_schema.triggers where 
information_schema.triggers.trigger_name like '%trigger_name%' and 
information_schema.triggers.trigger_schema like '%data_base_name%'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.