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

Hai cột autoincrements hoặc autoincrement và cùng một giá trị trong cột khác

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);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chuyển từ MySQL sang PostgreSQL - Điều bạn nên biết

  2. Kết nối với cơ sở dữ liệu MySQL trực tuyến từ localhost

  3. Quyền truy cập bị từ chối đối với người dùng 'test' @ 'ip' (sử dụng mật khẩu:CÓ)

  4. OpenSSL - tra cứu độ sâu lỗi 18 ở 0:chứng chỉ tự ký

  5. Làm cách nào để xem chuỗi lệnh khi sử dụng các tham số MySqlCommand?