Escriptures a la Base de Dades - INSERT
INSERT amb els noms de les columnes
La comanda INSERT s'utilitza per afegir noves files en una taula.
La comanda necessita tres paràmetres:
-
el nom de la taula,
-
els noms de les columnes de la taula a les que volem donar valor,
-
els valors corresponents a cada columna.
Com INSERIM les següents dades per a crear un nou departament a la taula copy_departments?
| DEPARTMENT_ID | DEPARTMENT_NAME | MANAGER_ID | LOCATION_ID |
|---|---|---|---|
| 200 | Human Resources | 205 | 1500 |
INSERT INTO copy_departments (department_id, department_name, manager_id, location_id)
VALUES (200,'Human Resources', 205, 1500);
La sentència anterior mostra explícitament cadascuna de les columnes de la taula.
Els valors de les columnes es mostren en el mateix ordre.
També podem inserir els valors sense haver d'escriure el nom de les columnes, només cal posar-les totes en el mateix ordre en què ens mostra la comanda DESCRIBE.
En aquest cas, cal proporcionar valor per a totes les columnes.
INSERT sense els noms de les columnes
Podem escriure la sentència INSERT sense explicitar els noms de les columnes.
Tot i això, es recomana, per una major claredat, escriure sempre els noms de les columnes en les sentències INSERT.
| DEPARTMENT_ID | DEPARTMENT_NAME | MANAGER_ID | LOCATION_ID |
|---|---|---|---|
| 210 | Estate Management | 102 | 1700 |
INSERT INTO copy_departments
VALUES (210,'Estate Management', 102, 1700);
Abans de l'INSERT
Abans d'inserir les dades a la taula, cal comprovar alguns detalls de la taula.
La sentència DESCRIBE retorna una descripció de l'estructura de la taula.
describe copy_departments;
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| DEPARTMENT_ID | int(4) | NO | PRI | NULL | |
| DEPARTMENT_NAME | varchar(30) | NO | | NULL | |
| MANAGER_ID | int(6) | YES | | NULL | |
| LOCATION_ID | int(4) | YES | MUL | NULL | |
+-----------------+-------------+------+-----+---------+-------+
La sentència DESCRIBE retorna informació com ara:
-
Permís de valors duplicats
-
Tipus de dada permès
-
Mida del camp
-
Possibilitat de valor
NULLo no -
El camp Key indica si forma part de la Clau primària amb
PRI -
Quan el camp Key indica
MULmolt possiblement sigui una Clau Forana. També ho indicarà per altres índexos creats.
INSERT amb valors NULL
La sentència INSERT no necessita especificar totes les columnes; podem excloure columnes que volem deixar amb el valor NULL o bé amb el valor que se'ls assigna per defecte
(DEFAULT).
Si assignem valor a tots els camps que en necessiten és més que suficient.
A la taula employees el camp EMAIL es defineix com una columna NOT NULL.
Si no donem valor a aquesta columna, ens donarà un error*.
ERROR 1364 (HY000): Field 'EMAIL' doesn't have a default value
En algunes versions de MariaDB cal tenir activat el mode STRICT_TRANS_TABLES a la clàusula sql_mode del fitxer de configuració.
Una inserció implícita inserirà automàticament un valor NULL a les columnes que permeten valors NULs, excepte que tingui assignat un valor per defecte (Default).
Per afegir explícitament un valor NULL a una columna que permet valors NULs utilitzarem la paraula NULL com a valor.
Per expecificar una cadena buida (que no és el mateix que el valor NUL) farem servir dues cometes senzilles seguides sense cap caràcter enmig, ''.
INSERT INTO copy_employees (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary)
VALUES (302, 'Grigorz', 'Polanski', 'gpolanski',' ', '2015-06-15', 'IT_PROG', 4200);
INSERT amb valors ESPECIALS
A la sentència INSERT podem utilitzar valors com ara CURRENT_DATE, CURRENT_USER, etc
Podem veure funcions d'informació al següent enllaç: https://mariadb.com/kb/en/information-functions/
Cal assegurar-se del format a utilitzar per a la inserció de camps de tipus DATE, TIME i DATETIME.
Sempre podem usar la funció STR_TO_DATE.
INSERT INTO copy_employees (employee_id, first_name, last_name, email, phone_number,
hire_date,
job_id, salary)
VALUES (303,'Angelina','Wright', 'awright','4159982010',
STR_TO_DATE('10 07 2015 17:20', '%d %m %Y %H:%i'),
'MK_REP', 3600);
Un altre exemple amb CURRENT_USER i CURRENT_DATE.
INSERT INTO copy_employees (employee_id, first_name,
last_name,
email, phone_number,
hire_date,
job_id, salary)
VALUES (304,'Test',
SUBSTRING(CURRENT_USER, 1, INSTR(CURRENT_USER, '@') - 1),
't_user', 4159982010,
CURRENT_DATE,
'ST_CLERK',2500);
SUBCONSULTA per a inserir files
Podem afegir més d'una fila a la vegada (o una sola també) utilitzant una subconsulta que ens retorni tantes files com necessitem i on cada fila contingui el valor de totes les columnes a assignar.
El nombre total de columnes que retorni la subconsulta i el tipus de dada de les mateixes ha de ser el mateix de la taula on volem fer els INSERTs.
Podem posar el nom de les columnes de forma explícita o bé no posar-lo i especificar valor per a cada una d'elles.
La subconsulta no va inclosa entre parèntesis.
INSERT INTO taula [(camp1, camp2, camp...)]
SELECT ... FROM ... [WHERE ...];