Salta el contingut
 

Inserci贸 de registres

Joan Puigcerver Ib谩帽ez

j.puigcerveribanez@edu.gva.es

Llic猫ncia: CC BY-NC-SA 4.0

(Reconeixement - NoComercial - CompartirIgual) 馃叚

Introducci贸露

Una vegada s'ha definit un model de dades en una base de dades 茅s possible realitzar consultes per manipular les dades emmagatzemades, com consultar dades, insertar-ne de noves, modificar-les o eliminar-les.

Totes aquestes operacions es realitzen mitjan莽ant el Llenguatge de Manipulaci贸 de Dades (DML), un subllenguatge de SQL.

Aquest material es centrar脿 a estudiar com inserir dades a una base de dades.

DML露

El Llenguatge de Manipulaci贸 de Dades (DML o Data Definition Language) 茅s un subllenguatge de SQL que permet manipular les dades de una base de dades.

Les accions que es permeten s贸n:

  • SELECT: Permet consultar les dades de la base de dades.
  • INSERT: Permet inserir noves dades a la base de dades.
  • UPDATE: Permet modificar dades existents.
  • DELETE: Permet elmininar dades.

INSERT露

La sent猫ncia INSERT permet inserir noves dades a una base de dades.

T茅 el seg眉ent format:

INSERT INTO database.table_name (column_1, column_2, column_3, ...) VALUES
  (value_11, value_12, value_13, ...),
  (value_21, value_22, value_23, ...),
  ...
  (value_N1, value_N2, value_N3, ...);

  • INSERT INTO: Indica que volem inserir nous registres a una taula.
  • database.table_name: S'especifica la base de dades i la taula on es dessitja inserir els registres. Especificar database 茅s opcional, sempre i quan s'haja fet 煤s de la sent猫ncia USE abans.

  • (columns...): Indica a quines columnes s'especificaran els valors al realitzar la inserci贸.

  • VALUES: Indica que a partir d'aquest moment s'especificaran els valors dels registres.
  • (values...): Tuples que contenen els valors del nou registre. Cada tupla ha de tindre el mateix nombre de valors que l'especificat en (columns...) i cal especificar els valors en el mateix ordre.

    Es poden especificar m煤ltiples tuples en un mateix INSERT.

Documentaci贸

Documentaci贸 oficial sobre inserir nous registres:

Al realitzar la consulta no 茅s necessari especificar totes les columnes en (columns...).

  • Si no s'indica cap columna, la sent猫ncia utilitzar脿 totes les columnes de la taula.
  • Si una columna no 茅s especificada, el seu valor ser脿:
    • El valor per defecte si s'ha especificat DEFAULT.
    • El seg眉ent valor disponible si s'ha especificat AUTO_INCREMENT.
    • NULL si la columna permet valors nuls.
    • Si cap de les opcions anteriors es pot aplicar, es produir脿 un error.

DEFAULT i NULL

CREATE TABLE persona (
    dni CHAR(9) PRIMARY KEY
);
CREATE TABLE cotxe (
    matricula CHAR(7) PRIMARY KEY,
    n_bastidor CHAR(8) UNIQUE NOT NULL,
    marca VARCHAR(50) NOT NULL,
    model VARCHAR(50) NOT NULL,
    km INT UNSIGNED NOT NULL DEFAULT 0,
    dni_propietari CHAR(9),
    data_compra DATE NULL,
    FOREIGN KEY (dni_propietari) REFERENCES persona (dni)
);

INSERT INTO cotxe (matricula, n_bastidor, marca, model)
    values ("4231KJL", "16483920", "Ford", "Focus");

INSERT INTO cotxe (matricula, n_bastidor, model)
    values ("3457BNR", "34256234", "Ibiza");
Error Code: 1364. Field 'marca' doesn't have a default value

SELECT * FROM cotxe;
+-----------+------------+-------+-------+----+----------------+-------------+
| matricula | n_bastidor | marca | model | km | dni_propietari | data_compra |
+-----------+------------+-------+-------+----+----------------+-------------+
| 4231KJL   | 16483920   | Ford  | Focus |  0 | NULL           | NULL        |
+-----------+------------+-------+-------+----+----------------+-------------+

En la consulta anterior, s'ha inserit un cotxe en el qual no s'ha especificat el propietari ni la data de compra.

  • El valor de km 茅s 0, el valor per defecte.
  • El valor de dni_propietari 茅s nul.
  • El valor de data_compra 茅s nul.

Despr茅s s'ha intentat inserir un cotxe on no hem especificat la marca. Com aquest atribut s'ha definit com NOT NULL, la sent猫ncia falla.

AUTO_INCREMENT

CREATE TABLE producte (
    id_producte INT PRIMARY KEY AUTO_INCREMENT,
    nom VARCHAR(50) NOT NULL,
    preu DECIMAL(5, 2) NOT NULL
);

INSERT INTO producte (nom, preu) values
    ("Barra de pa", "0.5"),
    ("Botella d'aigua", "1");

INSERT INTO producte (id_producte, nom, preu) values
    (10, "Napolitana xocolate", "1.5");

SELECT * FROM producte;
+-------------+---------------------+------+
| id_producte | nom                 | preu |
+-------------+---------------------+------+
|           1 | Barra de pa         | 0.50 |
|           2 | Botella d'aigua     | 1.00 |
|          10 | Napolitana xocolate | 1.50 |
+-------------+---------------------+------+
En la consulta anterior s'han afegit diferents productes. Podem observar que la primera inserci贸 no s'ha especificat l'atribut id_producte, i per tant, han rebut el valor de AUTO_INCREMENT.

馃搶 Aquest document pot quedar desactualitzat despr茅s d鈥檌mprimir-lo. Pots consultar la versi贸 m茅s recent a la p脿gina web.
馃尶 Abans d鈥檌mprimir aquest document, considera si 茅s realment necessari. Redueix el consum de paper i ajuda a protegir el nostre entorn.