Salta el contingut

3. DML - Manipulació de dades

3.1. Inserir dades (INSERT)

a) Les formes més corrents d'inserir dades en una taula

  • Inserir una fila indicant quines columnes i en quin ordre es van a posar els valors:

    SQL
    INSERT INTO alumnes(codi, nom) VALUES(25, "Pep");
    
  • Inserir una fila sense indicar columnes. S'introduiran tots els valors i en l'ordre en què estan les columnes en la taula:

    SQL
    INSERT INTO alumnes VALUES(25, "Pep", "Garcia");
    
  • Inserir diverses files en una sola sentència:

    SQL
    1
    2
    3
    4
    INSERT INTO alumnes(codi, nom) VALUES
        (25, "Pep"),
        (26, "Pepa"),
        (27, "Pepet");
    

Exercicis. INSERT INTO (BD cultius)

1) Inserix un nou tipus de cultiu de codi ARR i nom Arròs.

2) Inserix un nou país de nom Espanya del continent Europa.

3) Inserix les següents 4 províncies, en una sola sentència: - València, amb 1 milió d'habitants - Alacant, amb 700000 d'habitants - Castelló, amb mig milió d'habitants - Madrid, amb 2 milions d'habitants

4) Inserix la comarca "Ribera Baixa", de codi RB.

Nota

Per a vore els registres d'una taula (i així comprovar que s'han fet els inserts, etc) ja vorem que ho podem fer amb la següent instrucció:

SQL
SELECT * FROM nom_taula;

b) Altres formes d'inserir dades en taules

  • Inserir files en una taula a partir de la SELECT d'una altra taula:

    SQL
    1
    2
    3
    4
    INSERT INTO alumnes_cicles (cod, nom)
        SELECT ...
        FROM alumnes
        WHERE alumnes.cicle = 's';
    
  • Inserir files a partir d'un fitxer (per defecte, en la carpeta de la BD):

    SQL
    1
    2
    3
    LOAD DATA LOCAL INFILE '/home/abdo/Escriptori/fitxer_pobles.csv'
    INTO TABLE pobles
    FIELDS TERMINATED BY ','
    

L'operació inversa (de taula a fitxer) seria:

SQL
1
2
3
4
5
SELECT ...
    INTO OUTFILE 'fitxer_alumnes.csv'
    FIELDS TERMINATED BY ','
    FROM ...
    WHERE ...

Ara bé, no podem deixar-ho en qualsevol carpeta ja que no tenim permisos. Primer haurem de vore en quina carpeta podem crear eixe fitxer de resultats i després bolcar allí el resultat de la select. Per exemple:

SQL
SHOW VARIABLES LIKE "secure_file_priv";

Suposem que ens mostra: /var/lib/mysql-files

Ara podem fer el bolcat així:

SQL
1
2
3
4
SELECT *
INTO OUTFILE "/var/lib/mysql-files/jug_bar.csv"
FROM jugadors
WHERE equip = "bar";

3.2. Esborrar dades (DELETE)

SQL
DELETE FROM alumnes          -- Esborrarà totes les files que
    WHERE codi = 25;         -- complisquen la condició del WHERE

Veiem que en el DELETE no s'especifiquen els camps a esborrar, ja que s'esborra tota la fila. El WHERE no és obligatori però si no posem cap condició esborrarà totes les files.

Notes

  • Més endavant comentarem més coses de la condició del WHERE (quan veiem la clàusula WHERE de la sentència SELECT).
  • Potser MySQL no deixe fer UPDATE o DELETE perquè està en mode segur. En eixe cas, cal canviar la variable d'entorn corresponent:

    SQL
    SET SQL_SAFE_UPDATES = 0;
    

3.3. Modificar dades (UPDATE)

SQL
1
2
3
4
5
UPDATE alumnes
    SET carrer = "Sequial",
        numero = 31,          -- Modificarà totes les files que
        poble = 46410         -- complisquen la condició del WHERE
    WHERE codi = 24;

Exercicis. DELETE i UPDATE (BD cultius)

Nota

Si volem fer modificacions de les dades de la BD (inserts, updates o deletes) i després deixar-ho com estava, usarem transaccions: begin i rollback (ja entrarem en detall). Però no funciona en DDL (creates, alters i drops).

SQL
1
2
3
4
5
begin;
    update ...
    delete ...
    insert ...
rollback;

1) Esborra la província de Madrid.

2) Augmenta un 10% la població de totes les províncies.

3) Modifica la comarca RB fent que el nom comence per "La". Utilitza l'operador CONCAT (consulta la sintaxi a Internet).

4) Guarda les dades de les províncies al fitxer "provincies.txt" del directori sobre el qual tens permisos. Recorda que eixe directori es pot saber executant:

Text Only
1
2
3
```sql
SHOW VARIABLES LIKE "secure_file_priv";
```

5) Esborra el contingut de la taula províncies i torna a carregar les dades a partir del fitxer que has creat a l'exercici anterior.