sql >> Base de Datos >  >> RDS >> Mysql

Dos columnas de autoincremento o autoincremento y el mismo valor en otra columna

Entonces, ¿desea permitir que una columna use la función de incremento automático, pero hacer que otra columna en la misma tabla también tenga el mismo valor?

No puedo pensar en una razón por la que necesitarías esta característica. ¿Quizás podría explicar lo que está tratando de lograr y yo puedo sugerir una solución diferente?

Un gatillo no funcionará para esto. Es un problema del huevo y la gallina:

  • No puede cambiar el valor de ninguna columna en un AFTER generar.
  • Pero el valor de incremento automático aún no se establece cuando BEFORE el disparador se ejecuta.

Tampoco funcionará usar MySQL 5.7 GENERATED columna:

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.

No puede hacerlo en una sola instrucción SQL. Tienes que INSERT la fila, e inmediatamente haga una UPDATE para establecer su segunda columna en el mismo valor.

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

Alternativamente, podría generar el valor de ID utilizando algún otro mecanismo además de AUTO_INCREMENT (por ejemplo, una clave de incremento de Memcached). Luego podría insertar el nuevo valor en ambas columnas:

INSERT INTO MyTable (id, why_would_you_want_this) VALUES ($gen_id, $gen_id);