La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy.

Presentaciones similares


Presentación del tema: "Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy."— Transcripción de la presentación:

1 Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP

2 Agenda Modificando la instancia DML Sentencias

3 Agenda INSERT UPDATE DELETE TRANSACCIONES DML Sentencias

4 Agenda Modificando la instancia DML Sentencias

5 DML Modificando la instancia
Con el Data Definition Language (DDL) creamos y modificamos el esquema (o estructura) de la base Con el Data Manipulation Language (DML) modificamos la instancia, es decir: insertamos, modificamos y eliminamos tuplas en las tablas Veremos los comandos INSERT, UPDATE y DELETE de forma muy simplificada Pueden surgir errores por intentar violar cualquier constraint definida: Tipo de datos, NOT NULL, CHECK, PK, UK o FK

6 Agenda INSERT UPDATE DELETE TRANSACCIONES DML Sentencias

7 Sentencias INSERT Permite insertar nuevas tuplas en una tabla existente INSERT INTO <nombre_tabla> (col1, col2, ..., colN) VALUES (val1, val2, ..., valN); Ejemplo: INSERT INTO elementos (simbolo, nombre) VALUES ('H', 'Hidrogeno'); INSERT INTO moleculas (nombre, carga) VALUES ('Agua', 0); INSERT INTO elementos_molecula (elemento, molecula, numero) VALUES ('H', 'Agua', 2);

8 Sentencias INSERT Si se omite el nombre de una columna, se insertará NULL en esa columna Si no se especifican las columnas, se asume que en la cláusula VALUES vendrán los valores para todas las columnas en el orden en que fueron definidas en la tabla Se considera una buena práctica especificar siempre las columnas en el INSERT Habrá valores nuevos donde antes no había: el RDBMS debe verificar la integridad

9 Sentencias INSERT Ejemplos de error SQL> desc elementos
Name Null? Type SIMBOLO NOT NULL CHAR(2) NOMBRE NOT NULL VARCHAR2(20) NUMERO_ATOMICO NUMBER(10,2) SQL> insert into elementos values ('He', null, null); insert into elementos values ('He', null, null) * ERROR at line 1: ORA-01400: cannot insert NULL into ("ALFONSO"."ELEMENTOS"."NOMBRE")

10 Sentencias INSERT SQL> insert into elementos values ('He', 'Helio', 'desconozco'); insert into elementos values ('He', 'Helio', 'desconozco') * ERROR at line 1: ORA-01722: invalid number SQL> insert into elementos values ('H', 'Hidrogeno', 1); insert into elementos values ('H', 'Hidrogeno', 1) ORA-00001: unique constraint (ALFONSO.SYS_C ) violated SQL> insert into elementos_molecula values ('C', 'Metano', 1); insert into elementos_molecula values ('C', 'Metano', 1) ORA-02291: integrity constraint (ALFONSO.FK_MOLECULAS_ELEMENTOS) violated - parent key not found

11 Sentencias UPDATE Permite modificar tuplas existentes en una tabla existente UPDATE <nombre_tabla> SET col1 = val1, col2 = val2, ..., colN = valN WHERE <predicado>; Ejemplo: UPDATE elementos SET nombre = 'Hidrógeno‘ WHERE nombre = 'Hidrogeno‘;

12 Sentencias UPDATE Todas las tuplas que cumplen el predicado se modifican con los valores del set El predicado (por ahora) debe versar sobre las columnas de la tabla, y puede contener: Comparaciones simples: =, <, >, <> Comparaciones por rango: between Expresiones regulares: like Comparación con null: is null, is not null Expresiones lógicas: AND, OR, NOT

13 Sentencias UPDATE Como en el INSERT, pueden ocurrir errores porque habrá valores nuevos donde antes no había, pero además, valores que existen pueden dejar de existir Un UPDATE podría modificar el padre de una FK definida con la cláusula “ON UPDATE RESTRICT” SQL> update elementos set simbolo = 'Z' where simbolo = 'H'; update elementos set simbolo = 'Z' where simbolo = 'H' * ERROR at line 1: ORA-02292: integrity constraint (ALFONSO.FK_MOLECULAS_ELEMENTOS) violated - child record found

14 Sentencias DELETE Permite eliminar tuplas de una tabla existente
DELETE FROM <nombre_tabla> WHERE <predicado>; Ejemplo: DELETE FROM elementos WHERE simbolo = 'H'; DELETE FROM movimientos WHERE fecha_mov < '15/05/2002'; Posibilidad de integrity constraint violated - child record found en FKs con la cláusula “ON DELETE RESTRICT”

15 Sentencias UPDATE y DELETE
Cuidado con los predicados: un predicado mal escrito puede modificar (o eliminar) tuplas que no se pretendían modificar (o eliminar) El predicado vacío se evalúa TRUE para todas las tuplas ! UPDATE elementos set simbolo = 'H'; DELETE FROM elementos; ¿Qué hacemos si nos equivocamos?

16 Sentencias TRANSACCIONES Los RDBMS implementan transacciones ACID
Atomicity (se hacen en su totalidad o no se hacen) UPDATE cuentas set saldo = saldo-500 where cuenta = 15263; UPDATE cuentas set saldo = saldo+500 where cuenta = 9935; INSERT INTO transferencias (fecha, desde, hacia, monto) VALUES (SYSDATE, 15263, 9935, 500); COMMIT; -- Aquí se confirma la transacción

17 Sentencias TRANSACCIONES Los RDBMS implementan transacciones ACID
Consistency (cualquier intento de violar una constraint termina en un error) Isolation (mientras la transacción no se confirmó mediante COMMIT nadie más ve los datos intermedios y las transacciones no se afectan unas a otras) Durability (después del COMMIT los cambios perduran)

18 Sentencias TRANSACCIONES
¿Qué sucede si nos equivocamos u obtenemos un error? SQL> create table cuentas ( 2 cuenta integer not null primary key, 3 saldo number(10, 2) not null 4 ); Table created. SQL> alter table cuentas add constraint check_saldo_positivo 2 check ( saldo >= 0); Table altered. SQL> insert into cuentas values (15263, 400); 1 row created. SQL> commit; Commit complete.

19 Sentencias TRANSACCIONES
¿Qué sucede si nos equivocamos u obtenemos un error? SQL> UPDATE cuentas set saldo = saldo-500 where cuenta = 15263; UPDATE cuentas set saldo = saldo-500 where cuenta = 15263 * ERROR at line 1: ORA-02290: check constraint (ALFONSO.CHECK_SALDO_POSITIVO) violated No podemos continuar la transacción SQL> rollback; Rollback complete.

20 Sentencias TRANSACCIONES
Algunos RDBMSs tienen un modo autocommit, donde cada sentencia termina con un commit implícito Todos tienen el modo opuesto, donde hay transacciones Las transacciones comienzan / terminan: Al iniciar la sesión Al ejecutar commit / rollback Al ejecutar DDLs o algunos comandos (según RDBMS) Al terminar la sesión

21 Sentencias LOCKING Es la forma general de lograr Isolation, cuando hay competencia por los mismos recursos Sesión 1 SQL> UPDATE cuentas 2 set saldo = saldo – 200 3 where cuenta = 15263; 1 row updated. Sesión 2 lock wait


Descargar ppt "Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy."

Presentaciones similares


Anuncios Google