1. SHOW TRIGGERS;
  2. SHOW TRIGGERS LIKE 'payments%';
  3. SELECT * from sql_invoice.invoices i ;
  4. SELECT * FROM sql_invoice.payments p ;
  5. DROP TABLE IF EXISTS payments_audit;
  6. CREATE TABLE payments_audit (
  7. client_id INT,
  8. `date` DATE,
  9. amount DECIMAL(9,2),
  10. action_type VARCHAR(50),
  11. action_date DATETIME
  12. );
  13. -- 新建trigger
  14. DROP TRIGGER IF EXISTS payments_after_insert;
  15. DELIMITER $$
  16. CREATE TRIGGER payments_after_insert
  17. AFTER INSERT ON payments
  18. FOR EACH ROW
  19. BEGIN
  20. UPDATE invoices
  21. SET payment_total = payment_total + NEW.amount
  22. WHERE invoice_id = NEW.invoice_id;
  23. -- 审计
  24. INSERT INTO payments_audit (
  25. client_id,
  26. `date`,
  27. amount,
  28. action_type,
  29. action_date
  30. ) VALUES (
  31. NEW.client_id,
  32. NEW.date,
  33. NEW.amount,
  34. 'Insert',
  35. NOW()
  36. );
  37. END$$
  38. DELIMITER ;
  39. INSERT INTO payments (
  40. payment_id,
  41. client_id,
  42. invoice_id,
  43. `date`,
  44. amount,
  45. payment_method
  46. ) VALUES (
  47. DEFAULT,
  48. 5,
  49. 3,
  50. NOW(),
  51. 10,
  52. 1
  53. );
  54. -- 删除的trigger
  55. DROP TRIGGER IF EXISTS payments_after_delete;
  56. DELIMITER $$
  57. CREATE TRIGGER payments_after_delete
  58. AFTER DELETE ON payments
  59. FOR EACH ROW
  60. BEGIN
  61. UPDATE invoices
  62. SET payment_total = payment_total - OLD.amount
  63. WHERE invoice_id = OLD.invoice_id;
  64. -- 审计
  65. INSERT INTO payments_audit (
  66. client_id,
  67. `date`,
  68. amount,
  69. action_type,
  70. action_date
  71. ) VALUES (
  72. OLD.client_id,
  73. OLD.date,
  74. OLD.amount,
  75. 'Delete',
  76. NOW()
  77. );
  78. END$$
  79. DELIMITER ;
  80. DELETE FROM payments
  81. WHERE payment_id = 16;

Event

  1. -- MYSQL所有系统变量
  2. SHOW VARIABLES LIKE 'event%';
  3. SET GLOBAL event_scheduler = 'ON';
  4. SHOW EVENTS LIKE 'monthly%';
  5. ALTER EVENT monthly_delete_stale_audit_rows DISABLE;
  6. ALTER EVENT monthly_delete_stale_audit_rows ENABLE;
  7. DROP EVENT IF EXISTS monthly_delete_stale_audit_rows;
  8. DELIMITER $$
  9. -- ALTER EVENT monthly_delete_stale_audit_row;
  10. CREATE EVENT monthly_delete_stale_audit_rows
  11. ON SCHEDULE
  12. -- AT '2022-05-01'
  13. EVERY 1 MONTH STARTS '2022-05-01' ENDS '2032-01-01'
  14. DO BEGIN
  15. DELETE FROM payments_audit
  16. WHERE action_date < NOW() - INTERVAL 3 MONTH;
  17. END$$
  18. DELIMITER ;