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

Trình kích hoạt MySQL để cập nhật một trường thành giá trị của id

Tôi không biết có cách nào để thực hiện điều này trong một câu lệnh, ngay cả khi sử dụng trình kích hoạt.

Giải pháp kích hoạt mà @Lucky đề xuất sẽ giống như thế này trong MySQL:

CREATE TRIGGER MyTrigger BEFORE INSERT ON MyTable
FOR EACH ROW BEGIN
  SET NEW.group_id = COALESCE(NEW.group_id, NEW.id);
END

Tuy nhiên, có một vấn đề. Trong BEFORE INSERT pha, id được tạo tự động giá trị chưa được tạo. Vì vậy, nếu group_id là null, nó được mặc định là NEW.id luôn là 0.

Nhưng nếu bạn thay đổi trình kích hoạt này để kích hoạt trong AFTER INSERT để bạn có quyền truy cập vào giá trị được tạo của NEW.id , bạn không thể sửa đổi giá trị cột.

MySQL không hỗ trợ các biểu thức cho DEFAULT của một cột, vì vậy bạn cũng không thể khai báo hành vi này trong định nghĩa bảng. * Cập nhật:MySQL 8.0.13 hỗ trợ DEFAULT (<expression>) nhưng biểu thức vẫn không thể phụ thuộc vào giá trị tăng tự động (đây là được lập thành tài liệu ).

Giải pháp duy nhất là thực hiện INSERT , và sau đó thực hiện ngay lập tức UPDATE để thay đổi group_id nếu nó không được đặt.

INSERT INTO MyTable (group_id, value) VALUES (NULL, 'a');
UPDATE MyTable SET group_id = COALESCE(group_id, id) WHERE id = LAST_INSERT_ID();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để chọn ngày từ cột ngày giờ?

  2. Có thể sử dụng Biến do người dùng xác định MySql trong .NET MySqlCommand không?

  3. Cách tốt nhất để tránh nhập trùng lặp vào cơ sở dữ liệu mysql

  4. Cách cài đặt phpMyAdmin trên các tài khoản lưu trữ được quản lý

  5. Làm cách nào để kết nối với MySQL bằng Python 3 trên Windows?