Escriptures a la Base de Dades - Còpia de taules
Còpia de Taules
Abans de veure la sentència INSERT aprendrem a copiar taules.
D'aquesta manera sempre tindrem les dades originals en les taules originals i treballarem amb les còpies de les taules.
SI volem, sempre podrem tornar a restaurar les dades a partir de la còpia original.
Primer mètode: CREATE TABLE AS SELECT ...
Les còpies de les taules no heretaran les regles d'integritat de clau primària ni de clau forana.
El que sí que heretarem seran els tipus de les dades.
Les noves taules les anomenarem copia_<nom_taula_original>.
La sintaxis per la creació de les còpies de les taules és:
CREATE TABLE <copia_taula>
AS SELECT * FROM <taula>;
Per exemple:
CREATE TABLE copia_employees
AS SELECT * FROM employees;
CREATE TABLE copia_departments
AS SELECT * FROM departments;
Per a verificar i comprovar la còpia de les taules, utilitzarem:
DESCRIBE <copia_taula>;
SELECT * FROM <copia_taula>;
Per exemple:
DESCRIBE copia_employees;
SELECT * FROM copia_employees;
DESCRIBE copia_departments
SELECT * FROM copia_departments;
Veiem com a la taula copia_departments no s'hi han creat els índex PRI ni MUL
describe 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 | |
+-----------------+-------------+------+-----+---------+-------+
describe copia_departments;
+-----------------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+-------+
| DEPARTMENT_ID | int(4) | NO | | NULL | |
| DEPARTMENT_NAME | varchar(30) | NO | | NULL | |
| MANAGER_ID | int(6) | YES | | NULL | |
| LOCATION_ID | int(4) | YES | | NULL | |
+-----------------+-------------+------+-----+---------+-------+
L'avantatge és que tenim totes les dades inserides a la nova taula
SELECT count(*) FROM departments;
+----------+
| count(*) |
+----------+
| 8 |
+----------+
SELECT count(*) FROM copia_departments;
+----------+
| count(*) |
+----------+
| 8 |
+----------+
Primer mètode: CREATE TABLE LIKE
Les còpies de les taules SÍ inclouran els índexos i les opcions de la taula.
Les còpies de les taules NO inclouran les restriccions de clau forana.
Les noves taules les anomenarem copy_<nom_taula_original>.
La sintaxis per la creació de les còpies de les taules és:
CREATE TABLE <copy_taula>
LIKE <taula>;
Per exemple:
CREATE TABLE copy_employees
LIKE employees;
CREATE TABLE copy_departments
LIKE departments;
Veiem com a la taula copy_departments SÍ s'hi han creat els índex PRI ni MUL
describe 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 | |
+-----------------+-------------+------+-----+---------+-------+
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 | |
+-----------------+-------------+------+-----+---------+-------+
L'inconvenient és que NO tenim les dades inserides a la nova taula
SELECT count(*) FROM departments;
+----------+
| count(*) |
+----------+
| 8 |
+----------+
SELECT count(*) FROM copy_departments;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
Per afegir les dades caldrà executar la comanda INSERT de la següent manera:
INSERT INTO copy_departments SELECT * FROM departments;
INSERT INTO copy_employees SELECT * FROM employees;
i ara ja hi tenim les dades
SELECT count(*) FROM departments;
+----------+
| count(*) |
+----------+
| 8 |
+----------+
SELECT count(*) FROM copy_departments;
+----------+
| count(*) |
+----------+
| 8 |
+----------+