Inserci贸 de registres
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.
Documentaci贸
Documentaci贸 oficial sobre DML:
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.