Tengo una tabla de contenido en mi base de datos MySQL (unTabla de contenido de Drupal, para lo que vale la pena), que tiene una clave primaria auto-incrementada, nid. Quiero ser capaz de implementar una solución de id e impar, donde el contenido creado en producción tiene incluso identificaciones y el contenido creado en dev tiene IDs impares, para evitar conflictos de ID cuando sincronizo. Desafortunadamente, MySQL no admite secuencias, o incrementos de incremento automático por tabla (es decir, incremento en 2 solo para db.node, en lugar de 1).
La mejor solución que se me ocurre es tener unEl disparador BEFORE INSERT y AFTER INSERT establece el valor de sesión de auto_increment_increment en 2 en el disparador BEFORE INSERT, y luego lo restablece en 1 en el disparador AFTER INSERT. Ya que solo establece la variable de sesión, no debería tener ningún efecto en otros procesos, y dado que es una tabla de Drupal CMS y no ocurre nada complicado, parece seguro, aunque se sienta mal.
Sin embargo, soy un administrador de MySQL intermedio (en el mejor:)) y como dije, ciertamente se siente mal, así que pensé que "pondría esto por ahí y vería si alguien tiene alguna reacción negativa fuerte a esto, tal vez algún problema que no esté previendo". (Y supongo que si nadie lo hace, tal vez alguien más lo encontrará útil).
Respuestas
0 para la respuesta № 1Este es un ejemplo simple de lo que quiere hacer, asumiendo que hay una columna entera "seq" en la tabla "my_table_name":
DROP trigger my_trigger_name;
CREATE TRIGGER my_trigger_name
BEFORE INSERT ON my_table_name
FOR EACH ROW
SET NEW.seq = (select ifnull(max(seq)+1,1) from source_table_name);