Vì vậy, bạn muốn để một cột sử dụng tính năng auto_increment, nhưng làm cho một cột khác trong cùng một bảng cũng có cùng giá trị?
Tôi không thể nghĩ ra lý do bạn cần tính năng này. Có lẽ bạn có thể giải thích những gì bạn đang cố gắng hoàn thành và tôi có thể đề xuất một giải pháp khác?
Một trình kích hoạt sẽ không hoạt động cho điều này. Đó là vấn đề giữa gà và trứng:
- Bạn không thể thay đổi bất kỳ giá trị nào của cột trong
AFTERcò súng. - Nhưng giá trị tăng tự động chưa được đặt khi
BEFOREthực thi trình kích hoạt.
Nó cũng sẽ không hoạt động khi sử dụng MySQL 5.7 GENERATED cột:
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT GENERATED ALWAYS AS (id)
);
ERROR 3109 (HY000): Generated column 'why_would_you_want_this'
cannot refer to auto-increment column.
Bạn không thể làm điều đó trong một câu lệnh SQL duy nhất. Bạn phải INSERT hàng, sau đó thực hiện ngay lập tức UPDATE để đặt cột thứ hai của bạn thành cùng một giá trị.
CREATE TABLE MyTable (
id INT AUTO_INCREMENT PRIMARY KEY,
why_would_you_want_this INT
);
INSERT INTO MyTable () VALUES ();
UPDATE MyTable SET why_would_you_want_this = LAST_INSERT_ID()
WHERE id = LAST_INSERT_ID();
Ngoài ra, bạn có thể tạo giá trị ID bằng một số cơ chế khác ngoài AUTO_INCREMENT (ví dụ:một phím tăng dần Memcached). Sau đó, bạn có thể chèn giá trị mới vào cả hai cột:
INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);