Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pemicu MySQL mendapatkan kueri saat ini yang menyebabkan pemicu menyala

Masalahnya di sini adalah bahwa ruang lingkup pemicu MySQL adalah tingkat baris, bukan tingkat pernyataan. Dengan demikian, dalam pemicu Anda memiliki akses ke nilai LAMA dan BARU untuk setiap kolom di baris yang diberikan, tetapi Anda tidak memiliki akses ke pernyataan yang menyebabkan pemicu diaktifkan.

Berkenaan dengan information_schema.processlist, tidak ada yang sebenarnya "disimpan" (bertahan) dalam tampilan itu. Ini hanya antarmuka SQL ke daftar proses, dan pernyataan yang menyebabkan pemicu diaktifkan tidak dapat diakses dalam lingkup pemicu.

Anda mengatakan bahwa Anda tidak ingin mengaktifkan log kueri umum, dan pendekatan ini tidak sempurna karena berbagai alasan (termasuk perincian event_Time menjadi 1 detik), tetapi inilah contoh bagaimana Anda dapat menulis ulang pemicu Anda menggunakan tabel general_log:

SET GLOBAL GENERAL_LOG='ON';
SET GLOBAL LOG_OUTPUT='TABLE';

DELIMITER || 

CREATE TRIGGER DEBUG_DATE BEFORE UPDATE ON db.tbl FOR EACH ROW 
BEGIN 
  DECLARE Q MEDIUMTEXT; 
  SELECT argument INTO Q 
  FROM mysql.general_log 
  where thread_id = connection_id() 
  order by event_time desc 
  limit 1;

  INSERT INTO db.tbl_log (INFO) 
  VALUES (Q); 

END ||

DELIMITER ;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Python - mysqlDB, hasil sqlite sebagai kamus

  2. Dapatkan Usia dari DOB di MySQL

  3. Apa itu PDO, apa hubungannya dengan injeksi SQL, dan mengapa saya harus menggunakan ini?

  4. MySQL:Bisakah saya melakukan join kiri dan menarik hanya satu baris dari tabel join?

  5. Ubah konten berdasarkan pilihan drop-down dari database mysql