{"id":293,"date":"2023-09-03T16:49:56","date_gmt":"2023-09-03T14:49:56","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/?page_id=293"},"modified":"2025-03-09T14:40:29","modified_gmt":"2025-03-09T12:40:29","slug":"1-6-insertar-y-manipular-datos-en-las-tablas","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/1-6-insertar-y-manipular-datos-en-las-tablas\/","title":{"rendered":"1.6. Insertar y manipular datos en las tablas"},"content":{"rendered":"<p>Una vez el esquema relacional de entidades previamente dise\u00f1ado est\u00e1 estructurado sobre MySQL mediante tablas, es el momento de dotar de contenido cada tabla.<\/p>\n<p>MySQL dispone de dos formas de insertar nuevos registros en las tablas de la base de datos:<\/p>\n<ol>\n<li>Carga simult\u00e1nea de m\u00faltiples registros desde un fichero de texto.<\/li>\n<li>Inserci\u00f3n individual de cada nuevo registro de forma manual.<\/li>\n<\/ol>\n<p>Para importar una cantidad elevada de <a href=\"javascript:void(0);\" class=\"tooltip\" data-toggle=\"popover\" data-placement=\"bottom\" data-content=\"Para que el int\u00e9rprete de SQL sea capaz de distinguir correctamente los atributos de cada registro es preciso utilizar el car\u00e1cter tabulador (\\t) para separar los valores.\" data-placement=\"top\" data-html=\"true\" >registros<\/a> es posible utilizar el comando LOAD DATA. Para invocar este comando debemos especificar el nombre del fichero de texto que alberga la informaci\u00f3n de los registros junto con el nombre de la tabla donde deben ser dados de alta. Es necesario disponer de acceso a un fichero de texto tabulado, donde cada fila representa un nuevo registro y cada columna alberga el valor de un atributo (especificado en el mismo orden que en la tabla).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">LOAD DATA LOCAL INFILE fichero.txt INTO TABLE tabla;<\/pre>\n<div class=\"featured featured-blue\"><p>En determinados entornos de UNIX es necesario activar espec\u00edficamente la opci\u00f3n \u2013local-infile a la hora de invocar al programa mysql. Esta opci\u00f3n, no obstante, est\u00e1 activada por defecto habitualmente en la mayor\u00eda de las distribuciones de Linux.<\/p>\n<\/div>\n<p>Podemos proceder a introducir los primeros datos en nuestro cat\u00e1logo de genes. Es recomendable empezar por las tablas m\u00e1s elementales, aquellas que no poseen claves for\u00e1neas. En nuestro caso, las tablas <strong>genoma <\/strong>y <strong>funciones <\/strong>se ajustan perfectamente a esta descripci\u00f3n. Por ejemplo, para poblar la tabla <strong>genomas <\/strong>editaremos el siguiente fichero, <strong>genomas.txt<\/strong>, desde nuestro terminal de UNIX:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">D. melanogaster Mosca de la fruta   Tambien denominada del vinagre\r\nH. sapiens      Hombre              Nuestra propia especie\r\nM. musculus     Raton               Otro organismo modelo<\/pre>\n<p>Para proceder a la carga de estos datos en la tabla <em>genomas<\/em>, el usuario debe introducir el siguiente comando desde el int\u00e9rprete de MySQL:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'genomas.txt' INTO TABLE genomas;\r\n\r\nQuery OK, 3 rows affected (0,08 sec)\r\nRecords:  3  Deleted:  0  Skipped:  0  Warnings:  0<\/pre>\n<p>Presentamos el contenido del fichero <strong>funciones.txt,<\/strong> que emplearemos para poblar la tabla <em>funciones <\/em>con tres nuevos registros:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">GO:0003700         Factor de transcripcion\r\nGO:0006338         Remodelado de cromatina\r\nGO:0007254         Via JNK\r\n<\/pre>\n<p>Ahora empleamos el fichero <strong>funciones.txt<\/strong> para poblar la correspondiente tabla:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'funciones.txt' INTO TABLE funciones;\r\nQuery OK,  3 rows affected (0,01 sec)\r\nRecords:  3  Deleted:  0  Skipped:  0  Warnings:  0\r\n<\/pre>\n<p>Una vez hemos poblado las tablas <strong>genomas <\/strong>y <strong>funciones <\/strong>con varias instancias de especies y funciones biol\u00f3gicas, respectivamente, es el momento de editar el fichero <strong>genes.txt<\/strong> para dar de alta nuevos genes en la tabla genes:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">MYC   chr8  + 128748314 128753678 NP_002458 H.sapiens\r\nHNF1A chr12 + 121416548 121440312 NP_000536 H.sapiens\r\ncbt   chr2L \u2013    476437    479046 NP_722636 D.melanogaster\r\nash2  chr3R +. 20477248  20479098 NP_733023 D.melanogaster\r\n<\/pre>\n<p>Y ahora procedemos a realizar la carga con el comando <strong><code>LOAD DATA<\/code><\/strong>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'gens.txt' INTO TABLE gens;\r\n\r\nQuery OK,  4 rows affected (0,02 sec)\r\nRecords:  4  Deleted:  0  Skipped:  0  Warnings:  0\r\n<\/pre>\n<p>Antes de proceder a realizar las primeras consultas, editaremos el fichero de texto anotaciones.txt para asignar funciones a los genes que hemos registrado en los comandos previos.<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">MYC    GO:0003700  Experimental\r\nMYC    GO:0006338  Literatura\r\nHNF1A  GO:0003700  Experimental\r\ncbt    GO:0003700  Experimental\r\ncbt    GO:0007254  Experimental\r\nash2   GO:0006338  Experimental\r\nash2   GO:0003700  Computacional\r\n<\/pre>\n<div class=\"featured featured-blue\"><p>Observad que los genes pueden poseer m\u00e1s de una anotaci\u00f3n funcional. Por otro lado, la misma funci\u00f3n biol\u00f3gica puede ser desempe\u00f1ada por genes distintos. Pero los dos valores juntos forman una clave \u00fanica.<\/p>\n<\/div>\n<p>Estamos en condiciones de poblar nuestra \u00faltima tabla <em>anotaciones<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'anotaciones.txt'\r\n    -&gt; INTO TABLE anotaciones;\r\n\r\nQuery OK,  7 rows affected (0,08 sec)\r\nRecords:  7  Deleted:  0  Skipped:  0  Warnings:  0\r\n<\/pre>\n<p>La carga de datos desde un fichero de texto en las tablas es extremadamente \u00fatil. No obstante, en determinados casos necesitamos dar de alta un nuevo registro de forma aislada, pero la edici\u00f3n de un fichero de texto \u00fanicamente con este objetivo es menos eficiente.<\/p>\n<p>En estos casos, el comando <code>INSERT<\/code> es m\u00e1s adecuado, dado que implementa esta funcionalidad en el gestor MySQL de bases de datos. El usuario debe especificar en el mismo orden tanto la lista de atributos del nuevo registro como sus correspondientes valores. El resto de atributos no incluidos en la relaci\u00f3n anterior tomar\u00e1n el valor <code>NULL<\/code> (excepto para aquellos donde est\u00e1 expresamente prohibida esta circunstancia durante la creaci\u00f3n de la tabla, campos obligatorios):<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">INSERT INTO tabla (campo1, campo2,...,campoN)\r\nVALUES (valor1,valor2,...,valorN);\r\n<\/pre>\n<p>Por regla general, sin embargo, un registro contiene todos los campos declarados para una tabla. Por tanto, respetando el orden de los campos en la tabla, podemos omitir la relaci\u00f3n completa de los atributos:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">INSERT INTO tabla\r\nVALUES (valor1,valor2,...,valorN);\r\n<\/pre>\n<p>A modo de ejemplo, mostramos a continuaci\u00f3n la secuencia de comandos de inserci\u00f3n equivalente a la carga simult\u00e1nea de las funciones ejecutada anteriormente.<\/p>\n<div class=\"featured featured-blue\"><p>Las cadenas de texto deben introducirse utilizando siempre comillas simples, mientras que los valores num\u00e9ricos no necesitan ning\u00fan formato adicional.<\/p>\n<\/div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; INSERT INTO funciones\r\n    -&gt; VALUES ('GO:0003700',\r\n    -&gt;         'Factor de transcripcion');\r\n\r\nmysql&gt; INSERT INTO funciones\r\n    -&gt; VALUES ('GO:0006338',\r\n    -&gt;         'Remodelado de cromatina');\r\n\r\nmysql&gt; INSERT INTO funciones\r\n    -&gt; VALUES ('GO:0007254',\r\n    -&gt;         'Via JNK');\r\n<\/pre>\n<div class=\"featured featured-blue\"><p>En el caso de intentar dar de alta un registro cuya clave primaria ya existe, el sistema nos advertir\u00e1 del error, abortando dicha operaci\u00f3n. Una tabla no puede tener una clave primaria repetida.<\/p>\n<\/div>\n<p>Una vez tenemos los datos introducidos en las tablas podemos modificarlos con la instrucci\u00f3n <code>UPDATE<\/code> o eliminar registros con la instrucci\u00f3n <code>DELETE<\/code>.<\/p>\n<p>Por ejemplo, si queremos modificar el valor <strong>&#8216;Factor de transcripci\u00f3n<\/strong><strong>&#8216;<\/strong> situado en el campo <strong>descripcion <\/strong>del registro o fila con clave primaria &#8216;GO:0003700&#8217; de la tabla funciones, y queremos que el nuevo valor sea <strong>&#8216;Transcription factor<\/strong>&#8216; escribiremos la instrucci\u00f3n siguiente:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">UPDATE funciones\r\nSET descripcion ='Transcription factor'\r\nWHERE funcion = 'GO:0003700';<\/pre>\n<p>Para eliminar \u00fanicamente algunos registros de una determinada tabla podemos utilizar el comando <strong><code>DELETE <\/code><\/strong>junto con la cl\u00e1usula <strong><code>WHERE<\/code><\/strong>. De este modo, seleccionaremos con precisi\u00f3n los registros que deben ser dados de baja.<\/p>\n<p>Si el usuario desea eliminar todos los registros de una tabla, conservando la estructura de esta (para reutilizarla en el futuro), basta con omitir la condici\u00f3n:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">DELETE FROM tabla WHERE condiciones;\r\nDELETE FROM tabla;\r\n<\/pre>\n<p>Si queremos eliminar el registro de la tabla <strong>funciones <\/strong>con clave primaria &#8216;<strong>GO:0007254<\/strong>&#8216; escribiremos la instrucci\u00f3n siguiente:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">DELETE FROM funciones WHERE funcion = 'GO:0007254';<\/pre>\n<p>Si intentamos eliminar un registro que est\u00e1 referenciado por una clave for\u00e1nea de otra tabla, el sistema lo impedir\u00e1 y saltar\u00e1 un error, a no ser que a la clave for\u00e1nea le indiquemos la opci\u00f3n <strong>ON DELETE CASCADE<\/strong>, que permite eliminar en cascada el registro que deseamos eliminar y los registros de la otra tabla que est\u00e1n referenciados.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Una vez el esquema relacional de entidades previamente dise\u00f1ado est\u00e1 estructurado sobre MySQL mediante tablas, es el momento de dotar de contenido cada tabla. MySQL dispone de dos formas de insertar nuevos registros en las tablas de la base de datos: Carga simult\u00e1nea de m\u00faltiples registros desde un fichero de texto. Inserci\u00f3n individual de cada [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":[],"acf":[],"_links":{"self":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/293"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/comments?post=293"}],"version-history":[{"count":17,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/293\/revisions"}],"predecessor-version":[{"id":1007,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/pages\/293\/revisions\/1007"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/es\/wp-json\/wp\/v2\/media?parent=293"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}