2011-06-16 58 views
12

¿Puedo, y, si puedo, cómo puedo establecer el valor predeterminado de un campo en una tabla MySQL en el valor de otro campo?Valor predeterminado de MySQL como el valor de otro campo

La cosa es: Tengo datos, y cada objeto de datos tiene su ID en la tabla. Pero, me gustaría la posibilidad de reorganizar los datos, cambiando su índice de clasificación, sin alterar su ID. Por lo tanto, el campo sort_num se debe establecer de forma predeterminada en el valor asignado al campo indexado autoincrementado ID.

¡Gracias de antemano!

+0

Posible duplicado e de [mysql establecer el valor predeterminado del campo a otra columna] (https://stackoverflow.com/questions/15384429/mysql-set-field-default-value-to-other-column) – River

Respuesta

8

veo dos soluciones posibles:

1. Posibilidad:

se utiliza una función simplemente ignorar sort_num si no se establece:

`SELECT * FROM mytable ORDER BY coalesce(sort_num, id)` 

coalesce() devuelve el primer valor no nulo, por lo tanto, debería insertar valores para sort_num si realmente necesita reordenar los elementos.

2. Posibilidad:

Usted escribe un disparador, que ajusta automáticamente el valor si no se encuentra en la instrucción de inserción:

DELIMITER // 

CREATE TRIGGER sort_num_trigger 
BEFORE INSERT ON mytable 
FOR EACH ROW BEGIN 
    DECLARE auto_inc INT; 
    IF (NEW.sort_num is null) THEN 
     -- determine next auto_increment value 
     SELECT AUTO_INCREMENT INTO auto_inc FROM information_schema.TABLES 
     WHERE TABLE_SCHEMA=DATABASE() AND TABLE_NAME = 'mytable'; 
     -- and set the sort value to the same as the PK 
     SET NEW.sort_num = auto_inc; 
    END IF; 
END 
// 

(inspirado en this comment)

Sin embargo, esto podría tener problemas de paralelización (se insertan varias consultas al mismo tiempo)

3

Es una mala idea tener una columna de incremento automático reordenado, por lo tanto, una mejor idea sería

Añadir un sort_num columna a la tabla

ALTER TABLE data ADD sort_num column-definition; (column definition same as ID) 

UPDATE data SET sort_num = ID 

Ahora jugar con sort_num la columna, ya que no tiene ningún efecto en la columna ID

+0

bueno, nunca tuve la intención de tener el auto-incremento columna reorganizada, el sort_num solo necesitaba el valor del otro como predeterminado para ordenar la columna sort_num y no interferir con los índices y los incrementos automáticos – arik

+1

Bueno, podrías usar el método sugerido arriba o lidiar con esto en el servidor lado. Como hacer insert, obtener last_insert_key y luego actualizar los datos de la tabla sort_num = id donde id = last_insert_key –

Cuestiones relacionadas