1 TEMA 6: MODIFICACIÓN DE LA BASE DE DATOS EN SQL 5.6

Anuncio
Modificación de la Base de Datos en SQL
TEMA 6: MODIFICACIÓN DE LA BASE DE DATOS EN SQL
5.6
MODIFICACIÓN DE LA BASE DE DATOS
SQL posee comandos destinados también para modificar la base de datos, entre estos se tienen
operaciones de borrado, inserción y actualización.
5.6.1 BORRADO
La operación de borrado se expresa de igual manera que una consulta. Se pueden borrar sólo
tuplas completas, es decir, no se pueden borrar valores de atributos concretos.
La expresión SQL relacionada con el borrado es:
♦ delete from r where p
Donde r es una relación y p es una condición lógica que determina las tuplas a ser eliminadas
de r, si la condición p es omitida, se eliminan todas la tuplas de r.
Hay que señalar que una orden delete opera sólo sobre una relación. Si se desea borrar tuplas
de varias relaciones, se deberá utilizar una orden delete por cada relación. El predicado de la
cláusula where puede ser tan complicado como el where de cualquier cláusula select, o tan
simple como una cláusula where vacía.
Ejemplo: Borrar todas las tuplas de la relación Prestamo (Los sistemas bien diseñados
requerirán una confirmación del usuario antes de ejecutar una consulta como esta).
♦ Solución: delete from Prestamo
Ejemplo: Borrar todas las cuentas de la Sucursal ‘Subtiava’
♦ Solución: delete from Cuenta where nombre_sucursal=’Subtiava’
Ejemplo: Borrar todas las cuentas de la Sucursal ‘Subtiava’
♦ Solución: delete from Cuenta where nombre_sucursal=’Subtiava’
Ejemplo: Borrar todos los préstamos en los que el monto del préstamo esté entre C$ 5,000 y
C$ 10,000 córdobas.
♦ Solución: delete from Prestamo where importe between 5000 and 10000
Ejemplo: Borrar las cuentas de todas las sucursales de Granada
En este caso la solución se genera mediante una subconsulta que muestra los nombres de las
sucursales ubicadas en Masaya. De modo que la expresión SQL requerida es:
♦ Solución: delete from Cuenta where nombre_sucursal in (select nombre_sucursal from
Sucursal where ciudad_sucursal = ‛Granada‛)
1
Modificación de la Base de Datos en SQL
En este borrado se selecciona primero todas las sucursales con sede en Granada y a
continuación borra todas las tuplas Cuenta pertenecientes a esas sucursales.
5.6.1.1
Uso de funciones de agregación en una subconsulta de borrado.
Ejemplo: Borrar todas las cuentas cuyos saldos sean inferiores a la media del banco
♦
Solución: delete from Cuenta where saldo <(select avg (saldo) from Cuenta)
La orden delete comprueba primero que cada tupla de la relación Cuenta para comprobar si la
cuenta tiene un saldo inferior a la media del banco. A continuación se borran todas las tuplas
que no cumplan la condición anterior, es decir, las que representan una cuenta con un saldo
menor que la media. Es importante realizar todas las comprobaciones antes de llevar a cabo
ningún borrado.
5.6.2 INSERCIÓN
El comando SQL encargado de realizar la inserción de una ó más tuplas en una relación es el
comando insert, este tiene dos variantes:
♦ Una para insertar una sola tupla indicando los valores de los atributos de forma explícita, la
forma general en este caso es insert into r values (tupla a insertar) en el caso de que se
respete el orden de los atributos en la relación r,
♦ En caso de que la tupla a insertar no respete ese orden, el nombre de los atributos se debe
listar también en el comando insert.
Para insertar datos en una relación, o bien se especifica la tupla que se desea insertar o se
formula una consulta cuyo resultado sea el conjunto de tuplas que se desean insertar.
Obviamente, los valores de los atributos de las tuplas que se inserten deben pertenecer al
dominio de los atributos. De igual manera, las tuplas insertadas deberán ser de la aridad
correcta.
La instrucción insert más sencilla corresponde a la de inserción de una tupla.
Ejemplo: Insertar en la base los datos asociados a la cuenta C-0045 en la Sucursal Léon y que
tiene como saldo C$ 6000.00
♦ Solución Caso 1: insert into Cuenta values ( ‛C-0045‛, ‛León‛, 6000)
En este ejemplo los valores se especifican en el mismo orden en que los atributos se listan en
el esquema de la relación Cuenta. Para beneficio de los usuarios que no pueden recordar el
orden de los atributos se especifican en la cláusula insert.
♦ Solución Caso 2: insert into Cuenta (nombre_sucursal, numero_cuenta, saldo) values
(‛León‛,‛C-0045‛,6000)
♦ Solución: insert into Cuenta (numero_cuenta, nombre_sucursal, saldo) values (‛C0045‛,‛León‛,6000)
2
Modificación de la Base de Datos en SQL
El efecto es similar al ejemplo anterior con la diferencia de que se han listado explicitamente
los nombres de los atributos, esto debido a que en la cláusula values no se ha guardado el
orden que estos tienen en la estructura de la tabla.
♦ Generalmente se desea insertar las tuplas que resultan de una consulta.
Ejemplo: Si a todos los clientes que tienen un préstamo en la sucursal Subtiava se les quisiera
regalar, como gratificación una cuenta de ahorro con C$ 5000.00 por cada cuenta de préstamo
que posee.
♦ Solución: insert into Cuenta select nombre_sucursal,numero_prestamo, 1000 from
Prestamo where nombre_sucursal = ‘Subtiava’
La instrucción select se evalúa primero, produciendo un conjunto de tuplas que a continuación
se insertan en la relación Cuenta. Cada tupla tiene un nombre_sucursal (Subtiava), un
numero_prestamo (que sirve como número para la nueva cuenta) y un saldo inicial de la
cuenta (C$ 1000).
Es necesario añadir tuplas a la relación Impositor, a través de la siguiente consulta:
♦ Solución: insert into Impositor select nombre_cliente, numero_prestamo from
Prestatario, Prestamo where Prestatario.numero_prestamo = Préstamo.numero_prestamo
and nombre_sucursal = ‘Subtiava‛
Esta consulta inserta en la relación Impositor una tupla (nombre_cliente, numero_prestamo)
por cada nombre_cliente que posea un préstamo en la sucursal Subtiva, con número de
préstamo numero_prestamo.
5.6.3 ACTUALIZACIONES
En determinadas situaciones puede ser necesario cambiar un valor dentro de una tupla, sin
cambiar todos los valores de la misma. Para este tipo de situaciones se utiliza la instrucción
update. Al igual que ocurre con insert y delete, se puede elegir las tuplas que van a ser
actualizadas mediante una consulta.
Forma general: Sea r una relación y sea exp la expresión de actualización, entonces la forma
general del comando de actualizaciones:
♦ update r set exp
Ejemplo: Realizar el pago de intereses anuales y todos los saldos se incrementen en un 5%,
habría que formular la siguiente consulta de actualización:
♦ Solución: update Cuenta set saldo=saldo * 1.05
Esta actualización se aplica una vez a cada tupla de la relación Cuenta.
Ejemplo: Si se paga el interés sólo a las cuentas con un saldo de C$ 1000 o superior, se puede
escribir la siguiente consulta.
♦ Solución: update Cuenta set saldo=saldo * 1.05 where saldo >=1000
3
Modificación de la Base de Datos en SQL
En general la cláusula where de la instrucción update puede contener cualquier constructor
legal en la cláusula where de una instrucción select (incluyendo instrucciones select anidadas).
Como con delete e insert, un select anidado en una instrucción update puede referenciar la
relación que se esté actualizando. SQL, primero comprueba todas las tuplas de la relación para
determinar las que deberían actualizar y después la actualización.
Ejemplo: Pagar un interés del 5% a las cuentas cuyo saldo sea mayor que la media.
♦ Solución: update Cuenta set saldo=saldo * 1.05 where (saldo > select avg(saldo) from
Cuenta)
Ejemplo: Suponer que las cuentas con saldos superiores a C$ 5000 reciben un 6% de interés,
mientras que las demás cuentas recibirán un 5%.
♦ Solución: update Cuenta set saldo=saldo * 1.06 where saldo > 5000
♦ Solución: update Cuenta set saldo=saldo * 1.05 where saldo <= 5000
Tomar en cuenta, que el orden en el que se ejecutan dos instrucciones de actualización es
importante.
Este tipo de solución tiene el inconveniente de que si se modifica el orden de las consultas de
actualización se pueden generar actualizaciones erróneas. Así si se realiza primero el
incremento del 5%, valores cercanos a 1000 pasarían a ser valores mayores de 1000 con lo cual
se les aplicaría el 6% de incremento, llegándose a un incremento neto del 1.05 * 1.06 = 1.113
es decir el 11.3%, en lugar del 5% para evitar esta problemática SQL cuenta con el comando
case muy similar al comando de los lenguajes de propósito general, así la expresión del
ejemplo anterior utilizando case es:
SQL ofrece una constructora case, que se puede usar para formular las dos instrucciones de
actualización en una instrucción de actualización.
Solución: update Cuenta set saldo = case when saldo <= 10000 then saldo * 1,05 else saldo *
1.06 end
♦ La forma general de la cláusula case es:
case
when pred1 then result1
when pred2 then result2
…
when predn then resultn
else result0
end
En este caso se analizan cada uno de los predicados y si predi es verdadero entonces se ejecuta
resulti.
Por otra parte si ninguno es verdadero se ejecuta result0.
4
Modificación de la Base de Datos en SQL
5.7
TRANSACCIONES
Una transacción es un conjunto de instrucciones SQL de consultas y actualizaciones que deben
de ejecutarse todas de forma exitosa o no ejecutar ninguna. La norma SQL especifica que una
transacción comienza de forma implícita (no hay comando de comienzo) cuando se ejecuta una
instrucción SQL, la transacción finaliza con cualquiera de las siguientes opciones dependiendo
de la decisión del usuario.
Commit: Compromete la Transacción actual, es decir hace que los cambios realizados por la
transacción sean permanentes en la base de datos. Después de ejecutarse este comando
comienza una nueva transacción de forma automática
RollBack: Su efecto es retroceder la transacción actual es decir deshace todas las
actualizaciones realizadas por las instrucciones SQL, de tal forma que la base de datos se
restaura al estado que existía previo a la primera instrucción de la transacción.
5
Descargar