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
AFTER
cò súng. - Nhưng giá trị tăng tự động chưa được đặt khi
BEFORE
thự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);