Sei sulla pagina 1di 5

3.6 Sentencias DML, Transacciones, Confirmacin y Deshacer.

Sentencia INSERT
La primer sentencia del grupo de sentencias del Data Management Language es INSERT, que
permite insertar filas en una tabla, permitiendo ingresar columna a columna los valores de cada
una de ellas:

INSERT INTO empleados (empno, ename, job, mgr, hiredate, sal, comm, deptno)
VALUES (8000, Alves, Pedro, Programa, 7411, 3500, null, 20)

La lista de columnas se puede obviar, pero por claridad se sugiere no dejar de consignarla.

Otra forma para insertar filas en una tabla, y ms de una por ejecucin presentamos esta sintaxis,
que incluye un select dentro del Insert, llamando habitualmente a esta sentencia subordinada
Subconsultas:

INSERT INTO empleados_histrico (empno, ename, job, mgr, hiredate, sal, comm, deptno,
fecha_carga)
SELECT empno, ename, job, mgr, hiredate, sal, comm, deptno, current_date
FROM empleados
WHERE hiredate < 01/01/2000;

En este caso hacemos el supuesto de que estamos insertando en la tabla de empleados


histricos, los empleados que hayan sido contratados antes del primero de enero del ao 2000,
agregando la fecha actual en la columna fecha_carga de la tabla histrica. En esta sola
operacin se insertaran mas de una fila en la tabla objetivo y es una de las aplicaciones de las
subconsultas que veremos mas en detalles en las siguientes lecturas.

Sentencia UPDATE
La sentencia para cambiar el valor de una o ms columnas en una tabla es UPDATE que tiene la
siguiente sintaxis en MySQL, aumentando el sueldo de todos los empleados de la tabla:

UPDATE [LOW_PRIORITY] [IGNORE] tbl_name


SET col_name1=expr1 [, col_name2=expr2 ...]
[WHERE where_condition]
[ORDER BY ...]
[LIMIT row_count]

Ejemplo:
UPDATE empleados
SET sal = sal * 1.2;

Esto provoca un aumento de sueldo de un 20% a todos los integrantes de la empresa, si se


deseara que se le aumente a unos pocos, se puede usar la clusula WHERE, que tiene las
mismas caractersticas que tiene en la sentencia SELECT. Si, por ejemplo, slo nos interesa
aumentarle el sueldo a los que ganan entre 1000 y 1200, la sintaxis sera esta:

UPDATE empleados
SET sal = sal * 1.2

Materia: Base de Datos I -1-


Profesor: Calixto Maldonado
WHERE sal BETWEEN 1000 AND 1200;

En esta sentencia UPDATE se pueden usar subconsultas como argumento del SET y como parte
del WHERE como en cualquier sentencia SELECT.

UPDATE empleados
SET sal = (SELECT AVG(sal) FROM empleados)
WHERE sal BETWEEN 1000 AND 1200;

En la sentencia anterior, se ha modificado el sueldo de los que ganan entre 1000 y 1200, por el
valor del sueldo promedio de todos los empleados.

Sentencia MERGE
La sentencia MERGE es una combinacin de INSERT y UPDATE, y con la sintaxis que contiene
las dos sentencias, al ejecutarse busca la fila, si la encuentra la modifica de acuerdo a la sintaxis
del UPDATE y si no existe ninguna fila que cumpla con el criterio del WHERE, la inserta con la
sintaxis del INSERT, y si una fila cumple con una condicin la puede borrar.

Ejemplo de la sintaxis en ORACLE 10g:

MERGE INTO bonus b


USING (
SELECT empno, sal, deptno
FROM empleados
WHERE deptno =20) e
ON (b.empno = e.empno)
WHEN MATCHED THEN
UPDATE SET b.sal = e.sal * 0.1
DELETE WHERE (e.sal < 40000)
WHEN NOT MATCHED THEN
INSERT (b.ename, b.sal)
VALUES (e.name, e.sal * 0.05)
WHERE (e.sal > 40000);

Sentencia DELETE
Para borrar filas de una tabla, la sentencia DELETE es muy simple alcanza completar con el
nombre de la tabla y opcionalmente puede incorporarse la clusula WHERE con el funcionamiento
visto en la sentencia SELECT.

DELETE emp1
WHERE sal > 5000;

Sin la clusula WHERE y su condicin borrara todas las filas de la tabla, en cambio con esa
clusula, borrar aquellas filas con valores mayores a 5000 en la columna sal.

Materia: Base de Datos I -2-


Profesor: Calixto Maldonado
Sentencias de Control de Transacciones

Concepto de Transacciones
Todos los cambios de datos en una Base de datos puede ser hecha a travs de una transaccin.
Y estas transacciones pueden ser confirmadas con COMMIT o deshechas con ROLLBACK. Estas
dos sentencias cierran la transaccin. El motor de la base de datos si la transaccin es
confirmada, debe asegurar que los datos modificados pueden ser encontrados. Si una transaccin
es deshecha el sistema debe asegurar que no quede trunca ni ningn dato modificado sin corregir,
como si nunca se hubiera realizado el cambio borrado.

Por ejemplo, en este cuadro observamos una transaccin (Ora, 2009)

update cust_accounts

set balance = balance - 1500

where

account_no = '70-490930.1';

commit;

update cust_accounts

set balance = balance + 1500

where

account_no = '70-909249.1';

commit;

Si este cdigo es ejecutado y la base tiene un problema luego del primer COMMIT, las cuentas
quedan desbalanceados ya que se han debitado 1500 dlares del la primer cuenta.

En cambio si se dejara solamente el ltimo commit, estas sentencias se completaran o anularan


conjuntamente, impidiendo que quedaran desbalanceadas. (Ora, 2009)

Sentencia de confirmacin (Commit)


La sentencia COMMIT confirma y guarda los cambios de la transaccin en curso. Libera los
recursos bloqueados por cualquier actualizacin hecha con la transaccin actual.

Materia: Base de Datos I -3-


Profesor: Calixto Maldonado
COMMIT [WORK] [COMMENT 'comment_text']
COMMIT [WORK] [FORCE 'force_text' [,int] ]

Si ejecutamos:
DELETE FROM T_PEDIDOS WHERE COD_PEDIDO=15;
COMMIT;

Borra un registro y guarda los cambios.

Sentencia deshacer (Rollback)

La sentencia que permite deshacer la ltima transaccin, es ROLLBACK, cuando se ejecuta,


vuelve atrs las transacciones en todas las tablas hechas desde el ltimo COMMIT realizado, y su
sintaxis es simplemente

ROLLBACK;

Sentencia Savepoint

En una transaccin se pueden determinar puntos de salvaguarda o SAVEPOINTS, lo que significa


que se hace ROLLBACK desde el ltimo punto, como un marcador y su sintaxis es:

Inicio de transaccin
.----
----
SAVEPOINT inicio;
---
INSERT...
UPDATE ...
DELETE ...
...
ROLLBACK TO SAVEPOINT inicio;

y devuelve las transacciones desde el savepoint, es de notar que no se debe ejecutar un COMMIT
entre el SAVEPOINT y el ROLLBACK, por que quedan anulados al ser confirmados los cambios.

Final de la Lectura
Esta breve resea del lenguaje SQL no pretendi agotar el tema, por el contrario, se sugiere
estudiar los conceptos y consultar sobre las dudas con el tutor e inmediatamente practicar con las
herramientas previstas en el curso. No olvide que todas las bases de datos mantienen
documentacin que permanentemente est actualizndose y que es la mejor fuente de
informacin. Encontrar numerosos ejemplos de sintaxis con que un estudiante o desarrollador
profesional, pueden resolver las dudas se presenten.

Materia: Base de Datos I -4-


Profesor: Calixto Maldonado
Referencias Bibliogrficas
[Forta, 2007] SAMS teach you SQL in 24 hours SAMS Editions August 2007

[Lorentz, 2000] SQL Reference Release 3 (8.1.7) September 2000

[Lorentz, 2007] Oracle Database SQL Reference, 10g Rel 2 (10.2) Junio 2005
Disponible en http://tahiti.oracle.com

[Ora, 2009] Manual Oficial Oracle Concepts, disponible en linea http://www.adp-


gmbh.ch/ora/concepts/transaction.html - visitado Ago 2009

[Wiki, 2009] SQL http://es.wikipedia.org/wiki/SQL visitado en Ago 2009

Materia: Base de Datos I -5-


Profesor: Calixto Maldonado

Potrebbero piacerti anche