{"id":523,"date":"2023-10-19T14:01:13","date_gmt":"2023-10-19T12:01:13","guid":{"rendered":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/?page_id=523"},"modified":"2025-06-13T10:44:17","modified_gmt":"2025-06-13T08:44:17","slug":"1-6-inserir-i-manipular-dades-a-les-taules","status":"publish","type":"page","link":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/1-6-inserir-i-manipular-dades-a-les-taules\/","title":{"rendered":"1.6. Inserir i manipular dades a les taules"},"content":{"rendered":"<p>Un cop l\u2019esquema relacional d\u2019entitats pr\u00e8viament dissenyat est\u00e0 estructurat sobre MySQL mitjan\u00e7ant taules, \u00e9s el moment de dotar de contingut cada taula.<\/p>\n<p>MySQL disposa de dues formes d\u2019inserir nous registres a les taules de la base de dades:<\/p>\n<ol>\n<li>C\u00e0rrega simult\u00e0nia de m\u00faltiples registres des d\u2019un fitxer de text.<\/li>\n<li>Inserci\u00f3 individual de cada nou registre de forma manual.<\/li>\n<\/ol>\n<p>Per importar una quantitat elevada de <a href=\"javascript:void(0);\" class=\"tooltip\" data-toggle=\"popover\" data-placement=\"bottom\" data-content=\"\r\nPerqu\u00e8 l\u2019int\u00e8rpret de SQL sigui capa\u00e7 de distingir correctament els atributs de cada registre cal utilitzar el car\u00e0cter tabulador (\\t) per separar els valors.\" data-placement=\"top\" data-html=\"true\" >registres<\/a> \u00e9s possible utilitzar l\u2019ordre LOAD DATA. Per invocar aquesta ordre hem d\u2019especificar el nom del fitxer de text que alberga la informaci\u00f3 dels registres juntament amb el nom de la taula on han de ser donats d\u2019alta. Cal disposar d\u2019acc\u00e9s a un fitxer de text tabulat, on cada fila representa un nou registre i cada columna alberga el valor d\u2019un atribut (especificat en el mateix ordre que a la taula).<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">LOAD DATA LOCAL INFILE fitxer.txt INTO TABLE taula;<\/pre>\n<div class=\"featured featured-blue\"><p>En determinats entorns d\u2019UNIX cal activar espec\u00edficament l\u2019opci\u00f3 \u2013local-infile a l\u2019hora d\u2019invocar el programa mysql. Aquesta opci\u00f3, no obstant, est\u00e0 activada per defecte habitualment en la majoria de distribucions de Linux.<\/p>\n<\/div>\n<p>Podem procedir a introduir les primeres dades en el nostre cat\u00e0leg de gens. \u00c9s recomanable comen\u00e7ar per les taules m\u00e9s elementals, aquelles que no posseeixen claus foranes. En el nostre cas, les taules <strong>genomes <\/strong>i <strong>funcions <\/strong>s\u2019ajusten perfectament a aquesta descripci\u00f3. Per exemple, per poblar la taula <strong>genomes <\/strong>editarem el seg\u00fcent fitxer,<strong> genomes.txt<\/strong>, des del nostre terminal d\u2019UNIX:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">D. melanogaster Mosca de la fruita   Tambe anomenada del vinagre\r\nH. sapiens      Home                 La nostra propia especie\r\nM. musculus     Ratoli               Un altre organisme model<\/pre>\n<p>Per procedir a la c\u00e0rrega d\u2019aquestes dades a la taula <em>genomes<\/em>, l\u2019usuari ha d\u2019introduir la seg\u00fcent ordre des de l\u2019int\u00e8rpret de MySQL:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'genomes.txt' INTO TABLE genomes;\r\n\r\nQuery OK, 3 rows affected (0,08 sec)\r\nRecords:  3  Deleted:  0  Skipped:  0  Warnings:  0<\/pre>\n<p>Presentem el contingut del fitxer <strong>funcions.txt,<\/strong> que emprarem per poblar la taula <em>funcions <\/em>amb tres nous registres:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">GO:0003700         Factor de transcripcio\r\nGO:0006338         Remodelatge de cromatina\r\nGO:0007254         Via JNK\r\n<\/pre>\n<p>Ara emprem el fitxer <strong>funcions.txt<\/strong> per poblar la corresponent taula:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'funcions.txt' INTO TABLE funcions;\r\nQuery OK,  3 rows affected (0,01 sec)\r\nRecords:  3  Deleted:  0  Skipped:  0  Warnings:  0\r\n<\/pre>\n<p>Un cop hem poblat les taules <strong>genomes <\/strong>i <strong>funcions <\/strong>amb diverses inst\u00e0ncies d\u2019esp\u00e8cies i funcions biol\u00f2giques, respectivament, \u00e9s el moment d\u2019editar el fitxer <strong>gens.txt<\/strong> per donar d\u2019alta nous gens a la taula <em>gens<\/em>:<\/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>I ara procedim a realitzar la c\u00e0rrega amb l\u2019ordre <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>Abans de procedir a realitzar les primeres consultes, editarem el fitxer de text anotacions.txt per assignar funcions als gens que hem registrat en les ordres pr\u00e8vies.<\/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>Observeu que els gens poden posseir m\u00e9s d\u2019una anotaci\u00f3 funcional. D\u2019altra banda, la mateixa funci\u00f3 biol\u00f2gica pot ser exercida per gens diferents. Per\u00f2 els dos valors junts formen una clau \u00fanica.<\/p>\n<\/div>\n<p>Estem en condicions de poblar la nostra \u00faltima taula, <em>anotacions<\/em>:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; LOAD DATA LOCAL INFILE 'anotacions.txt'\r\n    -&gt; INTO TABLE anotacions;\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 c\u00e0rrega de dades des d\u2019un fitxer de text a les taules \u00e9s extremadament \u00fatil. No obstant aix\u00f2, en determinats casos necessitem donar d\u2019alta un nou registre de forma a\u00efllada, per\u00f2 l\u2019edici\u00f3 d\u2019un fitxer de text \u00fanicament amb aquest objectiu \u00e9s menys eficient.<\/p>\n<p>En aquests casos, l\u2019ordre <code>INSERT<\/code> \u00e9s m\u00e9s adequada, at\u00e8s que implementa aquesta funcionalitat en el gestor MySQL de bases de dades. L\u2019usuari ha d\u2019especificar en el mateix ordre tant la llista d\u2019atributs del nou registre com els seus corresponents valors. La resta d\u2019atributs no inclosos en la relaci\u00f3 anterior prendran el valor <code>NULL<\/code> (excepte per a aquells on est\u00e0 expressament prohibida aquesta circumst\u00e0ncia durant la creaci\u00f3 de la taula, camps obligatoris):<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">INSERT INTO taula (camp1, camp2,...,campN)\r\nVALUES (valor1,valor2,...,valorN);\r\n<\/pre>\n<p>Per regla general, per\u00f2, un registre cont\u00e9 tots els camps declarats per a una taula. Per tant, respectant l\u2019ordre dels camps a la taula, podem ometre la relaci\u00f3 completa dels atributs:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">INSERT INTO taula\r\nVALUES (valor1,valor2,...,valorN);\r\n<\/pre>\n<p>A tall d\u2019exemple, mostrem a continuaci\u00f3 la seq\u00fc\u00e8ncia d\u2019ordres d\u2019inserci\u00f3 equivalent a la c\u00e0rrega simult\u00e0nia de les funcions executada anteriorment.<\/p>\n<div class=\"featured featured-blue\"><p>Las cadenes de text s\u2019han d\u2019introduir utilitzant sempre cometes simples, mentre que els valors num\u00e8rics no necessiten cap format addicional.<\/p>\n<\/div>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"sql\" data-enlighter-theme=\"mowtwo\">mysql&gt; INSERT INTO funcions\r\n    -&gt; VALUES ('GO:0003700',\r\n    -&gt;         'Factor de transcripcio');\r\n\r\nmysql&gt; INSERT INTO funcions\r\n    -&gt; VALUES ('GO:0006338',\r\n    -&gt;         'Remodelatge de cromatina');\r\n\r\nmysql&gt; INSERT INTO funcions\r\n    -&gt; VALUES ('GO:0007254',\r\n    -&gt;         'Via JNK');\r\n<\/pre>\n<div class=\"featured featured-blue\"><p>En el cas d\u2019intentar donar d\u2019alta un registre la clau prim\u00e0ria del qual ja existeix, el sistema ens advertir\u00e0 de l\u2019error, avortant aquesta operaci\u00f3. Una taula no pot tenir una clau prim\u00e0ria repetida<\/p>\n<\/div>\n<p>Un cop tenim les dades introdu\u00efdes a les taules podem modificar-les amb la instrucci\u00f3 <code>UPDATE<\/code> o eliminar registres amb la instrucci\u00f3 <code>DELETE<\/code>.<\/p>\n<p>Per exemple, si volem modificar el valor \u00ab<strong>Factor de transcripci\u00f3<\/strong>\u00bb, situat en el camp del registre o fila amb clau prim\u00e0ria GO:0003700 de la taula, i volem que el nou valor sigui \u00ab<strong>Transcription factor<\/strong>\u00bb, escriurem la instrucci\u00f3 seg\u00fcent:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">UPDATE funcions\r\nSET descripcion ='Transcription factor'\r\nWHERE funcion = 'GO:0003700';<\/pre>\n<p>Per eliminar \u00fanicament alguns registres d\u2019una determinada taula podem utilitzar l\u2019ordre <code>DELETE<\/code> juntament amb la cl\u00e0usula <code>WHERE<\/code>. D\u2019aquesta manera, seleccionarem amb precisi\u00f3 els registres que han de ser donats de baixa.<\/p>\n<p>Si l\u2019usuari desitja eliminar tots els registres d\u2019una taula, conservant l\u2019estructura d\u2019aquesta (per reutilitzar-la en el futur), n\u2019hi ha prou amb ometre la condici\u00f3:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">DELETE FROM taula WHERE condicions;\r\nDELETE FROM taula;\r\n<\/pre>\n<p>Si volem eliminar el registre de la taula <strong>funcions <\/strong>amb clau prim\u00e0ria <strong>GO:0007254<\/strong> escriurem la instrucci\u00f3 seg\u00fcent:<\/p>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"raw\" data-enlighter-theme=\"droide\">DELETE FROM funcions WHERE funcion = 'GO:0007254';<\/pre>\n<p>Si intentem eliminar un registre que est\u00e0 referenciat per una clau forana d\u2019una altra taula el sistema ho impedir\u00e0 i saltar\u00e0 un error, tret que a la clau forana li indiquem l\u2019opci\u00f3 <strong>ON DELETE CASCADE<\/strong>, que permet eliminar en cascada el registre que desitgem eliminar i els registres de l\u2019altra taula que estan referenciats.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un cop l\u2019esquema relacional d\u2019entitats pr\u00e8viament dissenyat est\u00e0 estructurat sobre MySQL mitjan\u00e7ant taules, \u00e9s el moment de dotar de contingut cada taula. MySQL disposa de dues formes d\u2019inserir nous registres a les taules de la base de dades: C\u00e0rrega simult\u00e0nia de m\u00faltiples registres des d\u2019un fitxer de text. Inserci\u00f3 individual de cada nou registre de [&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\/wp-json\/wp\/v2\/pages\/523"}],"collection":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/wp-json\/wp\/v2\/comments?post=523"}],"version-history":[{"count":19,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/wp-json\/wp\/v2\/pages\/523\/revisions"}],"predecessor-version":[{"id":938,"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/wp-json\/wp\/v2\/pages\/523\/revisions\/938"}],"wp:attachment":[{"href":"http:\/\/eines-informatiques.recursos.uoc.edu\/gestion-de-datos\/wp-json\/wp\/v2\/media?parent=523"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}