INGENIERÍA DE SISTTEMAS Y TELEMÁTICA
SQL: DDL/DML
Alumnos:
MONTALVAN CASTILLO, Romario
LEON TAPIA, Dina
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
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);
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
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")
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)
*
ERROR at line 1:
ORA-00001: unique constraint (ALFONSO.SYS_C0029000) violated
SQL> insert into elementos_molecula values ('C', 'Metano', 1);
insert into elementos_molecula values ('C', 'Metano', 1)
*
ERROR at line 1:
ORA-02291: integrity constraint (ALFONSO.FK_MOLECULAS_ELEMENTOS)
violated - parent key not found
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‘;
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
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
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”
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?
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
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)
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.
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.
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
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
SQL> UPDATE cuentas
2 set saldo = saldo – 200
3 where cuenta = 15263;
lock wait

COMANDOS ddl

  • 1.
    INGENIERÍA DE SISTTEMASY TELEMÁTICA SQL: DDL/DML Alumnos: MONTALVAN CASTILLO, Romario LEON TAPIA, Dina
  • 2.
    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
  • 3.
    Sentencias INSERT • Permite insertarnuevas 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);
  • 4.
    Sentencias INSERT • Si seomite 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
  • 5.
    Sentencias INSERT • Ejemplos deerror 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")
  • 6.
    Sentencias INSERT SQL> insert intoelementos 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) * ERROR at line 1: ORA-00001: unique constraint (ALFONSO.SYS_C0029000) violated SQL> insert into elementos_molecula values ('C', 'Metano', 1); insert into elementos_molecula values ('C', 'Metano', 1) * ERROR at line 1: ORA-02291: integrity constraint (ALFONSO.FK_MOLECULAS_ELEMENTOS) violated - parent key not found
  • 7.
    Sentencias UPDATE • Permite modificartuplas 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‘;
  • 8.
    Sentencias UPDATE • Todas lastuplas 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
  • 9.
    Sentencias UPDATE • Como enel 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
  • 10.
    Sentencias DELETE • Permite eliminartuplas 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”
  • 11.
    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?
  • 12.
    Sentencias TRANSACCIONES • Los RDBMSimplementan 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
  • 13.
    Sentencias TRANSACCIONES • Los RDBMSimplementan 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)
  • 14.
    Sentencias TRANSACCIONES • ¿Qué sucedesi 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.
  • 15.
    Sentencias TRANSACCIONES • ¿Qué sucedesi 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.
  • 16.
    Sentencias TRANSACCIONES • Algunos RDBMSstienen 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
  • 17.
    Sentencias LOCKING • Es laforma 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 SQL> UPDATE cuentas 2 set saldo = saldo – 200 3 where cuenta = 15263; lock wait