una tabla soporta segundo registro por otra optimizar misma lentas duplicar datos cuantas copiar consultas columna mysql sql

soporta - duplicar registro mysql misma tabla



Copiar filas en MySQL (7)

Quiero copiar todas las columnas de una fila, pero no tengo que especificar cada columna. Conozco la sintaxis en http://dev.mysql.com/doc/refman/5.1/en/insert-select.html pero no veo forma de ignorar una columna.

Para mi ejemplo, estoy tratando de copiar todas las columnas de una fila a una nueva fila, a excepción de la clave principal.

¿Hay alguna manera de hacerlo sin tener que escribir la consulta con cada campo en ella?


No, esto no es posible

Pero es fácil obtener la lista de columnas y simplemente eliminar cuál no quieres que se copie. Este proceso también se puede hacer a través de un código, etc.


Si no especifica las columnas, debe mantener las entradas en orden. Por ejemplo:

INSERT INTO `users` (`ID`, `Email`, `UserName`) VALUES (1, ''[email protected]'', '''')

Funcionaría pero

INSERT INTO `users` VALUES (''[email protected]'', '''')

pondría el correo electrónico en la columna de ID así que no es bueno.

Intenta escribir las columnas una vez como:

INSERT INTO `users` (`Email`, `UserName`) VALUES (''[email protected]'', ''''), (''[email protected]'', ''2''), (''[email protected]'', ''3''), etc...

Sin embargo, creo que hay un límite en la cantidad de filas que puedes insertar con ese método.


Tendrá que enumerar las columnas que desea seleccionar si no las está seleccionando todas. Copiar / Pegar es tu amigo.


Supongo que, dado que desea omitir la clave principal, se trata de una columna auto_increment y desea que MySQL auto_increment el siguiente valor de la secuencia.

Dado que, suponiendo que no necesita hacer inserciones en bloque a través de la inserción en ... seleccionar de un método, lo siguiente funcionará para las inserciones de registro único / múltiple:

insertar en mytable (nulo, ''a'', ''b'', ''c'');

Donde la primera columna es tu clave primaria auto_incremented y las otras son tus otras columnas sobre la mesa. Cuando MySQL ve un nulo (o 0) para una columna auto_incremented , reemplazará automáticamente el valor nulo con el siguiente valor válido (consulte este enlace para obtener más información). Esta funcionalidad se puede desactivar deshabilitando el modo NO_AUTO_VALUE_ON_ZERO sql descrito en ese enlace.

Hazme saber si tienes alguna pregunta.

-Dipin


Este es un script PHP que escribí para hacer esto, supondrá que tu primer col es tu incremento automático.

$sql = "SELECT * FROM table_name LIMIT 1"; $res = mysql_query($sql) or die(mysql_error()); for ($i = 1; $i < mysql_num_fields($res); $i++) { $col_names .= mysql_field_name($res, $i).", "; } $col_names = substr($col_names, 0, -2); $sql = "INSERT INTO table_name (".$col_names.") SELECT ".$col_names." FROM table_name WHERE condition "; $res = mysql_query($sql) or die(mysql_error());


Copie la tabla a una nueva, luego borre la columna que no desea. Sencillo.


Si su id o columna de clave principal es un auto_increment , puede usar una tabla temporal:

CREATE TEMPORARY TABLE temp_table AS SELECT * FROM source_table WHERE id=''7''; UPDATE temp_table SET id=''100'' WHERE id=''7''; INSERT INTO source_table SELECT * FROM temp_table; DROP TEMPORARY TABLE temp_table;

entonces de esta manera puedes copiar todos los datos en la fila id = ''7'' y luego asignar un nuevo valor ''100'' (o cualquier valor que caiga por encima del rango de tu actual valor de auto_increment en la tabla de origen).

Editar: Cuidado con el; después de las declaraciones :)