BBDD UT5 01 ManipulacionDatos
BBDD UT5 01 ManipulacionDatos
BBDD UT5 01 ManipulacionDatos
ÍNDICE
4. TRANSACCIONES .................................................................................................. 13
ACTIVIDAD. TRANSACCIONES.................................................................................................................. 14
▪ COMMIT IMPLÍCITO Y EXPLÍCITO 15
▪ ROLLBACK AUTOMÁTICO 15
1. Manipulación de datos
Para realizar inserciones de datos en una base de datos relacional se emplea el comando INSERT INTO.
Este comando forma parte del lenguaje de manipulación de datos (LMD).
La utilidad de especificar las columnas radica en poder no dar valor a algunas columnas (siempre que no
sean obligatorias) o en cambiar el orden de los datos.
Describe profesor;
Consideraciones:
Observa, mediante un SELECT, qué código de centro tiene cada profesor en cada caso.
INSERT ALL
INTO nombreTabla [(columna, [columna] …)] VALUES (valor, [valor] …)
INTO nombreTabla [(columna, [columna] …)] VALUES (valor, [valor] …)
…
select * from dual;
Ejemplo:
Para realizar borrados de datos en una base de datos relacional se emplea el comando DELETE. Este
comando forma parte del lenguaje de manipulación de datos (LMD).
Consideraciones:
Se borran los registros que cumplen la condición especificada en la cláusula WHERE. Si se omite
esa cláusula, no hay condiciones y se borra todo el contenido de la tabla.
Este comando no modifica la estructura de la tabla, solo borra registros.
Para realizar actualizaciones de datos en una base de datos relacional se emplea el comando UPDATE.
Este comando forma parte del lenguaje de manipulación de datos (LMD).
Consideraciones:
Ejemplos:
Es posible realizar inserciones de datos tomando como datos de entrada el resultado de una consulta.
Consideraciones:
El listado devuelto por SELECT debe coincidir en cantidad de columnas y tipo de columnas
a las columnas que inserta INSERT.
Ejemplos: Se tiene la tabla EMPLE y se crea una nueva tabla EMPLE_SINCOMISION con la misma
estructura que EMPLE. En esta nueva tabla se desean guardar los empleados que no tienen
comisión. Podría hacerse con el comando:
TABLA EMPLE_SINCOMISION:
BBDD Manipulación de datos en una Base de Datos Relacional
<
▪ Se tiene la tabla EMPLE y se crea una nueva tabla EMPLE_DEP20 para almacenar los
empleados del departamento 20. La estructura de esta tabla no es idéntica a la de EMPLE:
TABLA EMPLE:
TABLA EMPLE_DEP20:
Para cargar los datos en la nueva tabla podría hacerse con el comando:
a) Crea la tabla NOMBRES (ver en Recursos). Es una tabla sencilla para hacer pruebas.
Inserta en esa tabla, en el campo “nombre”, los apellidos de los empleados de EMPLE que
pertenecen al departamento 20.
b) Crea una nueva tabla DIRECTORES que tenga el mismo formato que EMPLE, excepto por el
campo “oficio”, que no estará. Inserta en esta tabla todos los empleados cuyo oficio sea
“DIRECTOR”.
BBDD Manipulación de datos en una Base de Datos Relacional
<
En las inserciones con consultas puede resultar útil el empleo de constantes en los SELECT.
Esta consulta devuelve una mezcla entre constantes y datos de la tabla EMPLE:
Ejemplo: Insertar en la tabla EMPLE un nuevo empleado de apellido “Quiroga”, con número de empleado
1112. Los datos restantes de ese empleado serán los mismos que los de “Gil” y la fecha de alta
será el día de hoy.
a) Tablas ALUM y NUEVOS. Estas tablas guardan información sobre alumnos de un centro: los
actuales (ALUM) y los que han reservado plaza (NUEVOS).
Una vez se ha completado el plazo de matriculación, los alumnos que habían reservado plaza
pasan a ser alumnos actuales del centro. Inserta todos los alumnos de la tabla NUEVOS en la
tabla ALUM, y después borra todo el contenido de la tabla NUEVOS.
Nota: ten en cuenta que algunos alumnos de NUEVOS ya están en ALUM (realmente solo hay
que insertar los alumnos de NUEVOS que no están en ALUM)
Es posible realizar borrados de datos tomando como datos de entrada el resultado de una consulta.
Consideraciones:
El listado devuelto por SELECT debe ser compatible con el operador que se emplea en la
condición.
Ejemplo: Un prestamista tiene una tabla con sus clientes (CLIENTES) y otra con dnis que han sido
morosos con algún otro prestamista en algún momento (MOROSOS):
TABLA CLIENTES:
TABLA MOROSOS:
El prestamista desea borrar de tus clientes todas aquellas personas que están es su lista de
morosos. Para ello utiliza el comando:
Como resultado:
a) Tablas ALUM y ANTIGUOS. Borra de la tabla ANTIGUOS los alumnos que estén también en la
tabla ALUM. Se considera que un alumno es el mismo si coincide su nombre, edad y localidad
b) Tablas EMPLE y DEPART. Borra todos los departamentos de la tabla DEPART que no tengan
empleados.
BBDD Manipulación de datos en una Base de Datos Relacional
<
Se pueden incluir subconsultas en una sentencia UPDATE, tanto en la cláusula WHERE como en la
cláusula SET.
Existe un formato simplificado que permite asignar valores a varias columnas a partir de una única
subconsulta:
Se quiere actualizar la dirección y número de plazas del centro 10, a los mismos valores del centro 50:
Este formato reducido sólo es válido si se trata de una subconsulta. No sería posible (devolverá error):
Tablas EMPLE y DEPART. Para todos los empleados del departamento “Contabilidad” se modifica su
salario al doble del salario de “Sánchez”.
BBDD Manipulación de datos en una Base de Datos Relacional
<
La sentencia CREATE TABLE permite crear una tabla nueva a partir de la consulta de otra tabla o tablas
ya existentes. La nueva tabla contendrá la estructura y los datos devueltos por la consulta.
No es necesario especificar los tipos de datos, ya que se calcularán automáticamente a partir de los datos
obtenidos en la consulta. La nueva tabla no contendrá ninguna restricción de las tablas originales
(se creará sin clave primaria).
Ejemplo: crear una tabla llamada CENTROS_P donde se almacenan solo los centros de tipo P (públicos)
de la tabla CENTROS. La estructura de la nueva tabla debe ser igual a la de CENTROS:
▪ Crear una tabla llamada CENTROS_P2 donde se almacenan solo los centros de tipo P
(públicos) de la tabla CENTROS. La estructura de la nueva tabla debe ser igual a la de
CENTROS, excepto por el campo “tipo_centro”, que no aparecerá:
Ejemplo: a partir de EMPLE y DEPART, crear una tabla llamada EMPLEYDEPART donde aparezca el
número y apellido de empleado y el nombre del departamento al que pertenece. Las columnas
se nombrarán como “número”, “empleado” y “departamento”:
d) Modifica la tabla para que la clave primaria sea “numero”, y además sea foreign key
referenciando a la tabla EMPLE, con borrado en cascada. Comprueba de nuevo las vistas
USER_CONSTRAINTS y USER_CONS_COLUMNS.
BBDD Manipulación de datos en una Base de Datos Relacional
<
Observa que en ella se almacenarán los empleados que cobren el menor salario de toda la
empresa. Comprueba su contenido:
b) A modo de recordatorio: una vista (VIEW) en base de datos es una tabla lógica. Se maneja como
una tabla (INSERT, DELETE, SELECT…), pero realmente está obteniendo los datos de otras
tablas (TABLES).
Para que el usuario alumno pueda crear vistas, primero hay que darle permisos (si no los tiene).
Con el usuario administrador SYSTEM , da permisos a “alumno” para crear vistas:
Observa que en ella también se almacenarán los empleados que cobren el menor salario de toda
la empresa. Comprueba su contenido:
4. Transacciones
Introducción
Una transacción es un conjunto de una o más sentencias SQL que juntas forman una unidad de trabajo.
Representa una única operación lógica (por ejemplo, la acción de transferir fondos de una cuenta bancaria
a otra, aún cuando involucra cambios en varias tablas y diversos comandos).
COMMIT es el comando que se emplea para confirmar una transacción. Debe ejecutarse cuando se
haya finalizado la ejecución de todos los comandos SQL que forman parte de la transacción. Una
vez ejecutado, los cambios de la transacción pasan a ser permanentes.
ROLLBACK es el comando que se ejecuta para dar marcha atrás a una transacción no finalizada. Si
en la ejecución de un comando SQL que forma parte de una transacción se detecta que hay algún
problema (el comando no puede ejecutarse), se da marcha atrás a la transacción completa,
deshaciendo las operaciones realizadas por los comandos ya ejecutados. Al hacer un rollback la
base de datos vuelve al estado en que estaba en el último COMMIT ejecutado, es decir, vuelve al
último estado coherente.
TRANSACCIÓN
BD INSERT DELETE BD
COMMIT UPDATE COMMIT
consistente consistente
El concepto de transacción facilita que una base de datos relacional cumpla con los parámetros ACID:
Autocommit: parámetro de la base de datos que establece un COMMIT automático después de cada
sentencia SQL de tipo LMD (INSERT, DELETE o UPDATE).
Actividad. Transacciones
a) Desactiva el autocommit y crea la siguiente tabla de prueba:
create table NUMERO (num number(2) primary key);
Cuando se ejecutan ciertos comandos, la base de datos realiza COMMIT automáticamente (COMMIT
implícito):
Sólo es necesario realizar un COMMIT explícito empleando el comando en las sentencias LMD (lenguaje
de manipulación de datos): INSERT, DELETE, UPDATE.
▪ Rollback automático
Si se produce un fallo de sistema como por ejemplo un corte de alimentación, el SGBD realiza un
ROLLBACK automático para devolver a la base de datos al último estado consistente. Eso conllevará
tener que repetir el trabajo realizado y no confirmado antes del fallo de sistema.