Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Thay thế cho việc sử dụng Câu lệnh chuẩn bị sẵn trong Trình kích hoạt với MySQL

Câu trả lời ngắn gọn là bạn không thể sử dụng SQL động trong TRIGGER.

Tôi bối rối trước truy vấn giá trị auto_increment và gán giá trị cho cột ID. Tôi không hiểu tại sao bạn cần đặt giá trị của cột ID. Đó không phải là cột được xác định là AUTO_INCREMENT sao? Cơ sở dữ liệu sẽ xử lý nhiệm vụ.

Cũng không rõ ràng rằng truy vấn của bạn được đảm bảo trả về các giá trị duy nhất, đặc biệt là khi chạy các thao tác chèn đồng thời. (Tôi chưa thử nghiệm, vì vậy nó có thể hoạt động.)

Nhưng mã này rất đặc biệt.

Có vẻ như những gì bạn đang cố gắng hoàn thành là lấy giá trị của một cột từ hàng được chèn gần đây nhất. Tôi nghĩ rằng có một số hạn chế đối với việc truy vấn cùng một bảng mà trình kích hoạt được xác định. (Tôi biết chắc chắn là có trong Oracle; MySQL có thể tự do hơn.)

Nếu tôi cần làm điều gì đó như vậy, tôi sẽ thử một cái gì đó như thế này:

 SELECT @prev_hash := t.hash AS prev_hash 
   FROM core_Test t
  ORDER BY t.ID DESC LIMIT 1;

 SET NEW.hash = @prev_hash; 

Nhưng một lần nữa, tôi không chắc điều này sẽ hoạt động (tôi sẽ cần phải kiểm tra). Nếu nó hoạt động trên một trường hợp đơn giản, thì đó không phải là bằng chứng rằng nó hoạt động mọi lúc, trong trường hợp chèn đồng thời, trong trường hợp chèn mở rộng, v.v.

Tôi đã viết truy vấn theo cách tôi đã làm để nó có thể sử dụng một chỉ mục trên cột ID, để thực hiện thao tác quét ngược. Nếu nó không sử dụng chỉ mục, tôi sẽ thử viết lại truy vấn đó (có thể là dưới dạng JOIN, để có được hiệu suất tốt nhất có thể.

 SELECT @prev_hash := t.hash AS prev_hash
   FROM ( SELECT r.ID FROM core_Test r ORDER BY r.ID DESC LIMIT 1 ) s
   JOIN core_Test t
     ON t.ID = s.ID

Trích từ Hướng dẫn tham khảo MySQL 5.1
E.1 Các hạn chế đối với các chương trình được lưu trữ




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL - CHỌN * VÀO VỊ TRÍ OUTFILE?

  2. cách chạy một truy vấn mysql trong yii

  3. Ứng dụng để thiết kế ngược MySQL &PostgreSQL DB?

  4. Xem định nghĩa hàm / thủ tục được lưu trữ trong MySQL

  5. Chuyển đổi tệp fbk (firebird) sang MySql