Me gustaría tener un disparador para realizar siguiente operación de registros insertados:MySQL gatillo para actualizar un campo con el valor de Identificación del
# pseudocode
if new.group_id is null
set new.group_id = new.id
else
# don't touch it
end
Más claramente: decir que tengo una tabla con tres columnas: id
primaria clave, group_id
int, value
varchar.
cuando inserto con group_id
así:
INSERT INTO table(value, group_id) VALUES ('a', 10)
me gustaría tener:
id | group_id | value
---+----------+------
1 | 10 | a
pero cuando Omito group_id
:
INSERT INTO table(value) VALUES ('b')
Cabe automáticamente configurado al id
de este registro:
id | group_id | value
---+----------+------
2 | 2 | b
¿Es posible con un gatillo? (Sé que puedo actualizar el registro después de insertar pero tener el gatillo sería más agradable.)
Eso apesta. Incluso en 2016 –
@AA_PV, esto podría ser resuelto por un objeto de secuencia independiente, como lo hacen en Oracle. Esta ha sido una solicitud de función abierta en MySQL desde 2003: https://bugs.mysql.com/bug.php?id=1625 Pero en Oracle, para usar la secuencia, * debe * llamarla ya sea en el código de la aplicación, que significa escribir código para * cada * INSERTAR en una tabla que desea tener una clave primaria de autointegrinación. O escriba un desencadenador para * cada * dicha tabla. Los usuarios de MySQL disfrutan de poder omitir la escritura de tantos activadores, y simplemente declaran 'AUTO_INCREMENT' como una opción de columna. –
sí, pero dos columnas AUTO_INCREMENT no están permitidas en MySQL, ¿verdad? Aunque creo que se puede hacer algo similar a http://stackoverflow.com/a/7345183/4411645. Y para evitar la consulta anidada, tal vez también se pueda mantener en el código de la aplicación, aunque podría ser aún más inseguro, no estoy seguro. –