B3-T4_Modelo FÍSICO SQL Flashcards
¿Cuál es el mecanismo de protección ante fallos de disco implementado por Oracle?
ARCHIVELOG => protegerá la base de datos ante posibles fallos físicos de disco y ante modificaciones o eliminaciones NO deseadas.
¿A que recomendación se la conoce como SQL3?
SQL:1999
NOTA: era una versión Multi-Parts (5 partes) e introdujo los TRIGGERS.
¿SQL es un lenguaje 4GL puro?
No, porque tenemos una “extensión” procedural.
*SQL = PSM (Persistent Stored Module)
*Oracle => SQL / PL
*Microsoft => T - SQL
Se llama con la sentencia: CALL procedure
¿Es TRUNCATE una sentencia del estándar de SQL?
Si, desde SQL:2008.
NOTA: vacía la tabla.
¿Que características soporta SQLite?
- Compatible con SQL
- Transaciones (ACID)
NOTA: librería escrita en “C”, que implementa un SGBD (se usa en gran medida en ANDROID)
Nombre seis gestores de bbdd compatibles con SQL:
- SQL Server
- DB2
- Oracle
- MySQL
- PostgreSQL
- MaxDB
¿Qué sentencia debo de usar si NO quiero que al hacer un ROLLBACK se deshaga todo el trabajo de la transacción?
*“SAVEPOINT**
NOTA: se puede revertir con:
Release SAVEPOINT
¿Por qué TRUNCATE no soporta la clausula “where”?
Porque no puede borrar registros concretos.
NOTA: usa DROP, para borrar la table y luego CREATE, para crearla.
¿En qué se diferencian WHERE y HAVING?
HAVING se usa para poner condiciones a los datos agrupados, mientras que WHERE pone condiciones a una sóla tupla (fila).
¿En qué se diferencian UNION y MERGE?
Con UNION unes dos partes directamente (dos paquetes de filas, x ejemplo) y MERGE une dos cosas en base a ciertas condiciones de búsqueda
Define los operadores de conjuntos: EXCEPT y INTERSECT:
*EXCEPT: compara los resultados de 2 consultas y devuelve las filas de la 1ª que NO se encuentren en la 2ª, es decir, resta el conjunto de resultados de ambas consultas.
Ej: T1: 1, 2 y 3. T2: 2, 3 y 4
DEVUELVE: 1
*INTERSECT: funciona como un “AND”, es decir, sólo devuelve las filas existentes en ambas consultas.
Ej: T1: 1, 2 y 3. T2: 2, 3 y 4
DEVUELVE: 2 y 3
NOTA: “cond.1” AND “cond.2”
¿Para qué sirve la instrucción: INSTEAD OF…?
INSTEAD OF = EN LUGAR DE => es un ACTIVADOR (igual que AFTER y BEFORE), que permite omitir una instrucción DML (INSERT, DELETE o UPDATE) a una tabla y ejecutar otras instrucciones definidas en el cuerpo del TRIGGER en su lugar.
NOTA: la instruccion DML no se produce en absoluto.
¿Cómo crear un INSTEAD OF disparador?
CREATE TRIGGER trigger_name
ON {table-name}
INSTEAD OF {INSERT} o {UPDATE} o {DELETE}
AS
{sql_statements}
¿Qué se introdujo en las versiones de SQL 2006 y 2016?
*2006 => XML
*2016 => JSON
Enumera las distintas versiones de SQL:
*ANSI - 86 (1ª versión)
*ANSI - 92 (Revisión mayor)
Las siguientes versiones siguen el estándar ISO 9075:
*SQL - 1999 (SQL3) =>Triggers
*SQL - 2003 (Objeto SEQUENCE))
*SQL - 2006 (XML)
*SQL - 2008 (Truncate)
*SQL - 2016 (JSON)
Nombre seis gestores de bbdd compatibles con SQL:
- SQL Server
- DB2
- Oracle
- MySQL / MariaDB
- PostgreSQL
- MaxDB
¿Qué sentencia debo de usar sino quiero que al hacer un ROLLBACK se deshaga todo el trabajo de la transacción?
SAVEPOINT
¿En qué se diferencian SAVEPOINT y COMMIT?
En que SAVEPOINT es reversible (release savepoint), pero commit NO.
Es decir, con SAVEPOINT puedo marcar puntos que no quiero que se rebasen al hacer ROLLBACK, pero, si quiero cancelar ese punto, porque me interese manipular la zona que deja atrás, podría hacerlo con “RELEASE SAVEPOINT”. En cambio, lo guardado con COMMIT que grabado e inamovible.
¿Qué sentencia debo de usar si no quiero que al hacer un ROLLBACK se deshaga todo el trabajo de la transacción?
SAVEPOINT
¿Con que sentencia podemos crear un objeto que nos devuelva valores de forma incremental?
CREATE SEQUENCE
¿Para qué sirve SET TRANSACTION?
Para configurar parámetros de una transacción.
Expón algunas sentencias de DDL (Definición o creación):
*CREATE
*DROP (borra la tabla)
*ALTER (modificar, NO se existen ni MODIFY ni RENAME)
*TRUNCATE => VACÍA la tabla, es decir, borra el contenido, pero mantiene la tabla.
Expón algunas sentencias de DCL (Control sobre permisos y transacciones):
*GRANT (conceder permisos)
*REVOKE (quitar permisos)
*COMMIT / ROLLBACK (confirmar / deshacer cambios)
*SAVEPOINT / RELEASE POINT ( para no deshacer todo / quitar SavePoint)
*SET TRANSACTION / START TRANSACTION (configuración e inicio de transacción)
Expón algunas sentencias de DML (Manipulación de datos):
*SELECT (joins, agrupaciones, subconsultas)
*UPDATE (Actualiza toda la tabla si no le indicas una selección)
*INSERT (para añadir datos o estructuras a una tabla: INSERT TO nombre_tabla VALUES(valor1, valor2, …)
*DELETE (borrar datos)
*MERGE (mezcla registros de una tabla sobre otra => lo coincidente lo ACTUALIZAS / lo NO coincidente lo INSERTAS)
¿Cuáles son los 3 sistemas de borrados de SQL?
*DELETE table empleados ó DELETE empleados => borra el CONTENIDO o REGISTROS de la tabla.
*DROP table empleados => borra TODO: tabla+contendio
*TRUNCATE table empleados => VACÍA la table, es decir, borra el contenido, pero mantiene la tabla.
¿A que sublenguaje pertenece TRUNCATE y porque?
Al DDL, porque internamente realiza un DROP TABLE y un CREATE TABLE, aunque el efecto efectivamente es una tabla vacía.
¿Con que sentencia se modifica una columna de una tabla?
ALTER table_name ALTER column …
¿Con que sentencia borramos un tabla?
DROP table
Nombre las cuatro restricciones (CONSTRAINT) que podemos aplicar sobre las columnas:
- PRIMARY KEY (identifica de forma ÚNICA cada registro / NO NULL)
- UNIQUE (para garantizar que NO se inserten valores DUPLICADOS / admite sólo 1 NULL)
- FOREIGN KEY (es un campo (o colección de campos) en una tabla, que se refiere a la CLAVE PRIMARIA en otra tabla. La tabla con la clave externa (FORÁNEA) se denomina tabla secundaria, y la tabla con la clave principal se denomina tabla principal o de referencia (REFERENCES).
- CHECK (para establecer, x ejemplo, que cierta columna de una tabla tenga los valores mayores de 23, otra los menores, otra que tenga, … Ej: columna PRECIO => check (PRECIO>23)
¿Qué diferencia existe entre UNIQUE y PRIMARY KEY?
Que UNIQUE admite una fila a NULL
¿Con que sentencia se puede ejecutar un procedimiento almacenado?
CALL procedure
(para LLAMAR a los procedimientos almacenados => PSM)
Si queremos usar una secuencia, ¿qué permiso nos deben otorgar?
GRANT usage
*USAGE: permiso asociado a las SEQUENCE.
¿Cuál es la sintaxis de la sentencia REVOKE?
REVOKE privilegio ON object-name FROM grantee
NOTA: donde “grantee” es a quien le das o quitar el permiso, que puede ser un usuario o un rol.
¿Qué utilidad tiene conceder el privilegio: grant EXECUTE?
Para los “procedimientos almacenados”, que queramos ejecutar.
SINTAXIS: GRANT execute ON object-name FROM grantee
NOTA: donde “grantee” es a quien le das o quitar el permiso, que puede ser un usuario o un rol.
¿Cuál es sintaxis de GRANT y que privilegios puede conceder?
SINTAXIS: GRANT privilegio ON nombre_tabla TO grantee [WITH GRANT OPTION] => está coletilla opcional se pondría para que el usuario, a su vez, podrá otorgar esos privilegios a otros.
PRIVILEGIOS:
*SELECT
*UPDATE
*INSERT
*DELETE
*ALL (todos los privilegios)
*USAGE (para secuencias)
*EXECUTE (para “procedimientos almacenados” = PSM, PL o T-SQL)
¿Cuáles son los problemas de lectura de cada “Nivel de Aislamiento”?
ISOLATION LVL - SUCIA - NO REPETIBLE - FANTASMA
READ UNCOMMITED - SI - SI - SI
READ COMMITED - NO - SI - SI
REPETEABLE READ - NO - NO - SI
SERIALIZABLE - NO -NO - NO
2 MNEMOTECNIAS:
1. READ UNCOMMITED tiene TODOS los problemas de lectura y SERIALIZABLE no tiene NINGUNO.
- Los “Sies” y los “Noes”, estan colocados a la inversa, es decir, con los “Sies, empieza siendo todos Sies = todos lso problemas (READ UNCOMITED) y va descendiendo hasta SERIALIZABLE, que no tiene NINGÚN porblema de lectura.
Con los “noes” es justo al revés.
¿Cuál es la diferencia de las sintaxis de GRANT y REVOKE?
El ON/TO (Grant) y el ON/FROM (Revoke)
*grant privilegio ON object-name TO grantee
*revoke privilegio ON object-name FROM grantee
NOTA: donde “object_name” es la estructura sobre la que estamos dando/quitando el privilegio (tabla, vista, …) y “grantee” es a quien le das o quitar el permiso (usuario o rol).
¿Qué nivel de aislamiento es el más seguro pero el que peor rendimiento presenta?
SERIALIZABLE
¿Qué significa la cláusula WITH GRANT OPTION dentro una sentencia GRANT?
Que el usuario, a su vez, podrá otorgar esos privilegios a otros.
¿En qué situación se produce el problema de la lectura fantasma?
Cuando estamos trabajando con rangos de filas.
Ocurre cuando, durante una transacción, se ejecutan 2 consultas idénticas y los resultados de la 2ª no son iguales a los de la 1ª.
¿En qué situación se produce el problema de la lectura sucia?
Ocurre cuando se le permite a una transacción la lectura de una fila que ha sido modificada por otra transacción sin haber hecho COMMIT.
EJEMPLO con tabla “usuarios” y 2 transacciones:
ID NOMBRE EDAD
1 Jose 20
2 Pepa 25
*TRANSACCIÓN 1: SELECT EDAD FROM usuarios WHERE ID=1; => lee el valor 20
*TRANSACCIÓN 2: UPDATE usuarios SET EDAD=21 WHERE ID=1; => cambia el 20 x el 21, pero NO hace COMMIT.
*TRANSACCIÓN 1: SELECT EDAD FROM usuarios WHERE ID=1; => aunque no haya hecho COMMIT ahora leera ID=21
*TRANSACCIÓN 2: ROLLBACK => al hacer ROLLBACK vovlería el ID=1 a EDAD=20, ya que cuando se actualizó a 21 NO se hizo COMMIT.
¿En qué situación se produce el problema de la lectura NO Repetible?
Ocurre cuando en el curso de una transacción una fila lee 2 veces y los valores NO coinciden.
EJEMPLO con tabla “usuarios” y 2 transacciones:
ID NOMBRE EDAD
1 Jose 20
2 Pepa 25
*TRANSACCIÓN 1: SELECT * FROM usuarios WHERE ID=1; => lee el valor 20
*TRANSACCIÓN 2: UPDATE usuarios SET EDAD=21 WHERE ID=1; => cambia el 20 x el 21
COMMIT; => ahora 21 será el valor de ID=1
*TRANSACCIÓN 1: SELECT * FROM usuarios WHERE ID=1;
COMMIT; => el problema radica en que al estar trabajando la Tx.1 con los datos originales y luego la Tx.2 le modifica dichos datos, tendría que reestructurar su trabajo.
¿Para qué sirve la función de agregación AVG?
Para calcular la MEDIA.
Es decir, devuelve el promedio de los valores en una columna.
Por ejemplo, si tenía seis filas con una columna que contenía un precio, las seis filas se sumarían y se dividirían entre seis para conseguir el promedio.
AVERAGE = PROMEDIO
Si en una SQL vemos un HAVING , ¿qué hace falta también en esa SQL?
Que también exista GROUP BY
Si la tabla cliente (nombre, tipo, dirección) tiene 100 filas, ¿qué valor nos devolverá la sentencia select count (nombre) from cliente?
Como mucho 100, pero puede ser menor que 100 si existen filas con nombre a NULL
¿Qué diferencia existe entre usar UNION o UNION ALL para “fusionar” dos select’s ?
Que UNION ALL deja filas repetidas si las hubiera, no las elimina => es decir, muestra TODO TODO.
¿Qué hace una CROSS JOIN entre dos tablas?
El producto cartesiano de las filas de las dos tablas, es decir, TODO x TODO => mezcla todas las filas de una tabla con todas de la otra tabla.
EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2
*autor (ID, nombre): cardinalidad 3
1, Dani
2, Pepe
3, Luis
CROSS JOIN: daría como resultado= 6 => la fila 10, xxxx, 1 con las 3 de “autor” * la fila 20, xxxx, 2 con las 3 de “autor”
¿Qué hace una INNER JOIN entre dos tablas?
El resultado son las filas coincidentes (que hagan “match”), según la condición, etre FOREIGN KEY y PRIMARY KEY.
NOTA: El INNER es opcional.
EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2
*autor (ID, nombre): cardinalidad 3
1, Dani
2. Pepe
3, Luis
INNER JOIN: daría como resultado= 2 filas
1. 10, xxxx, 1 (FOREIGN KEY) con 1, Dani
2. 20, xxxx, 2 con 2. Pepe
¿Cuál es la sintaxis de OUTER JOIN?
SINTAXIS: LEFT, RIGHT O FULL [OUTER] JOIN => OUTER es opcional.
Ej: LEFT JOIN:
El resultado son TODAS las filas de la tabla de la izquierda y si no hay filas coincidentes se rellenan con NULL las columnas correspondientes a la tabla de la derecha.
¿Si la fila de la izquierda (LEFT) tiene 150 filas, ¿cuántas filas tendrá el resultado final con LEFT [OUTER] JOIN?
150 => pues también toma lo que no coincide, que tendrán valor NULL.
Es decir, si hay “match” tendrá los valores de la derecha también rellenos y si no hay “match” se pone NULL en la derecha.
Pon un ejemplo con LEFT OUTER JOIN o LEFT JOIN:
EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2
*autor (ID, nombre): cardinalidad 3
1, Dani
2. Pepe
3, Luis
2 tablas: “autor” (tabla izquierda), “libro” (tabla derecha) => la tabla LEFT o la que manda es ·autor” => coge fila por fila y va buscando coincidencias:
1º Fila: 1, Dani => busca coincidencias y encuentra un libro escrito por Dani: 10, xxxx, 1
2º Fila: 2, Pepe => encuentra coincidencias con la 2ª fila de la tabla “libro”: 20, xxxx, 2
3º Fila 3, Luis => que, aunque NO encuentra coincidencia, también se la lleva, pero sustituye por NULL los campos NO coincidentes: esta es la gran diferencia con INNER JOIN
Daría como resultado: 3 filas:
10, Dani, 10, xxxx
2, Pepe, 20, yyyy
3, Luis, NULL, NULL
*Con RIGHT JOIN es igual, pero manda la tabla de la derecha.
Ej: autor, libro => se cogen todos los registros de la tabla “libro” y se matchean con los de la tabla de la izquierda (autor).
Daría como resultado: 2 filas, ya que libro sólo tiene 2 filas.
NOTA: también existe FULL JOIN.
Pon un ejemplo con FULL OUTER JOIN o FULL JOIN:
Aquí mandan las 2 tablas, es decir, aparecen todos los que hacen match (los coincidentes).
EJEMPLO: con las 2 tablas “libro” (2 filas) y “autor” (3 filas):
*libro (ID, titulo, autor): cardinalidad 2
10, xxxx, 1
20, xxxx, 2
*autor (ID, nombre): cardinalidad 3
1, Dani
2. Pepe
3, Luis
2 tablas: “autor” (tabla izquierda), “libro” (tabla derecha) => se hace en 3 partes:
1º COINCIDENTES (los que hacen match) => 2 FILAS HACEN MATCH 2º Los que estan en la Izq. (LEFT) que NO estan en la Der. (RIGHT) => 1 FILA NO HACE MATCH X PARTE DE LEFT 3º VICERVERSA => 0 FILAS NO HACEN MATCH X PARTE DE RIGHT
Daría como resultado: 3 filas:
Si queremos relacionar dos tablas para obtener únicamente aquellas filas que están en ambas, ¿qué tipo de JOIN deberemos de usar?
INNER JOIN
NOTA: son las filas en las que coinciden la FOREIGN KEY con la PRIMARY KEY.
¿Para qué sirve una LEFT OUTER JOIN entre t1 y t2?
Para obtener todos los registros de t1 relacionados o no con t2.
NOTA: en los campos que no coinciden se rellenarían con NULL.
Es justo lo contrario a RIGHT JOIN.
¿Para qué sirve un MERGE de dos tablas?
Para fusionar los registros de una (source: datos de entrada o INPUT) sobre la otra (target: tabla que resulta de nuestras peticiones) realizando UPDATE si los registros existían en ambas o INSERT en caso contrario.
Define la estructura de MERGE:
- MERGE INTO nombre_table => target o tabla destino
- USING tabla_referencia => source o INPUT (datos de entrada)
- ON search_condición => condición de búsqueda (ej. esta fila de la tabla X esta también en la tabla Y?
- WHEN MATCHED => en caso afirmativ (ej. la fila de la tabla X tb esta en la Y)
4.1. THEN UPDATE SET col1= … => con THEN UPDATE puedes hacer una actualización - WHEN NOT MATCHED => en caso negativo:
5.1.THEN INSERT (col1, …) VALUES (…, …) => harías un INSERT para insertar dicha fila.
NOTA: “merge” es una especie de mezcla => lo COINCIDENTE lo actualizas / lo NO COINCIDENTE lo insertas.
¿Qué es una pseudotabla en un TRIGGER?
Una forma de poder referenciar la información antigua de una tabla (OLD) o la nueva (NEW) una vez que se ha ejecutado la sentencia que provoca el trigger o en un momento previo a esta.
Es una tabla adicional => se usa para recuperar valores antes de haber ejecutado el TRIGGER => se usan 2 tablas, esta adicional y con la que trabajamos u original.
SQL - ORACLE - SQL SERVER
Before = OLD = INSERTED
After = NE = DELETED
NOTA: cuando se crea una tabla, se crean 3 cosas: TABLA NEGOCIO, PSEUDOTABLA (tabla auditoria) y trigger.
Si se han insertado 500 filas en una tabla que tiene asociado un disparador, ¿cómo debemos de configurar el TRIGGER para que no salte para cada fila?
Usando FOR EACH STATEMENT (x cada sentencia), en lugar de FOR EACH ROW.
NOTA: un “Trigger” se pude aplicar de 2 maneras: x sentencias o x filas.
Define la sintaxis de un “Trigger”:
AFTER, BEFORE o INSTEAD OF + INSERT, UPDATE o DELETE:
SINTAXIS:
CREATE TRIGGER auditar_phone_book
AFTER UPDATE ON phone_book FOR EACH ROW / FOR EACH SENTENCE
BEGIN
(cuerpo) INSERT INTO phone_book_ahditoria (col1, …) VALUES (auditoria_seq.nextVal UPDATE.col1, OLD.col2, SYSDATE); => indicas que quieres recuperar la col1 y col2 usando la PSEUDOTABLA: “auditoria_phone_book
END;
NOTA: OLD.nombre_columna: te da el valor de la columna antes de que se haya ejecutado el evento (en este caso: antes de ser actualizado)
¿Dónde es típico realizar un DECLARE nombre-cursor CURSOR FOR SELECT …?
Dentro de un PROCEDURE junto con otras sentencias SQL, instrucciones de CONTROL, etc
¿A qué nos referimos con que SQL es, en parte, un lenguaje “procedural”?
A que aunque es un lenguaje de 4ª Generación (4 GL) y estos son declarativos, tiene una “extensión procedural” llamada: Procedimientos Almacenados o Procedures, que es un lenguaje o mecanismo para ejecutar instrucciones de programación que ejecutan acciones dentro de la misma base de datos (embebido).
SQL= lenguaje 4 GL (declarativo) + extensión procedural =SQL/PSM (Persistent Stored Modules) => incialmente publicado en el 96 como extensión SQL-92.
NOTA: en Oracle se llaman estos procedures PL/SQL y en Microsodft T-SQL.
¿Qué es un “procedure”?
*Lógica de negocio o especie de “script” que programamos y se ejecuta (CALL) dentro del SGBD (Sistema Gestor de BD), reduciendo el tráfico de datos al no tener que usar lenguajes externos.
*Se llama con: CALL procedure.
*A diferencia de las funciones, sus parámetros (entrada/salida) NO retornan valor.
*SINTAXIS: lo creas (CREATE PROCEDURE nombre_procedure) y en el cuerpo haces una SELECT. Luego, obtienes cursor de esa SELECT y lo usas junto a algún bucle (IF, FOR o CASE) para recorrer los resultados de la SELECT.
¿Dónde es típico realizar un DECLARE nombre-cursor CURSOR FOR SELECT …?
Dentro del cuerpo del PROCEDURE (entre BEGIN y END) junto con otras sentencias SQL, instrucciones de CONTROL, SELECT, …
Se crea para, por medio de un bucle (IF, FOR o CASE), recorrer la SELECT del “procedure.
SINTAXIS:
1 DECLARAR: DECLARE cursor_name IF/FOR query/SELECT
2 ABRIR CURSOR: OPEN cursor_name;
¿Qué ventaja y desventaja principal tienen los PROCEDURE?
- Ventaja: rendimiento, pues se ejecutan en el ámbito del SGBD y no habría que invocar a otro lenguaje, reduciendo, así, el tráfico de datos.
- Desventaja: lenguaje propietario (PL/SQL: Oracle, TSQL:Microsoft, PL/pgSQL, …)
¿En qué se diferencian SGBD (Sist. Gestor de BD) y RDBMS (Sist. Gestor der BD Relacional)?
En qué un SGBD almacena los datos en una estructura jerárquica y un RDBMS lo almacena en tablas.
EJEMPLOS:
*SGBD: Oracle, PostgreSQL, MySQL, DB2, ….
*RDBMS: Oracle, PostgreSQL, MySQL, SQL Server y MariaDB.
¿Cuáles son los 3 componentes de un sistema de bases de datos SQL?
*RDBMS (Sist. Gestor de BD Relacional): Oracle, PostgreSQL, MySQL, SQL Server y MariaDB.
*SQL: es el lenguaje.
*Base de Datos: almacén de datos.
¿Qué 2 tipos de TRANSACCIONES se dan en una BD?
*LOCALES: solo 1 gestor de BD.
Ej: utilizo sólo 1 Oracle => sólo haríamos transacciones contra dicha BD.
*DISTRIBUIDAS: usas + de 1 gestor de BD => por lo q se necesita un Motor TX.
Ej: usas una aplicación que guarda información en un SQL y un Oracle.
¿Para qué se usan los Monitores TX (Transaccional)??
Gobierna las transacciones DISTRIBUIDAS (uno de los 2 sistemas de transacciones: Distribuidas y Locales).
*En Java, esta incorporado dentro de los servidores de Aplicación y se comunican con la API de Java JTA (Java Transaction API).
¿Qué es una BD TRANSACCIONAL?
*SU OBJETIVO PRINCIPAL ES ASEGURAR LAS TRANSACCIONES DENTRO DE UNA BD RELACIONAL, pero, en caso de que no se pueda asegurar, REVERTIRLAS => evitando que las transacciones queden incompletas, es decir, o se realiza la transacción o no pasa nada.
*Tiene como fin el envío y recepción de datos a gran velocidad.
*Están destinadas al entorno de ANÁLISIS, datos de producción e industrial.
¿Qué es una BD RELACIONAL?
Es una colección de información organizada en TABLAS (o relaciones) relacionadas entre sí. Formadas por FILAS (tuplas o registros) y COLUMNAS (campos o atributos).
Cada REGISTRO o FILA tiene una ID única denominada CLAVE y las COLUMNAS contiene los CAMPOS de datos.
ID NOMBRE EDAD DNI = campos
1
2
3
4
.
.
.
¿Qué se entiende por TRANSACCIÓN en SQL?
Conjunto de sentencias SQL que se tienen que hacer TODAS o NINGUNA.
*Hay unos mecanismos para indicar al SGBD si hubiera que ir para atrás, todo ha ido bien, … => ROLLBACK, COMMIT, SAVEPOINT, …
¿Para qué sirve el objeto SEQUENCE del sublenguaje DDL (estructuras/objetos)?
Es un objeto para generar números secuenciales, para que, x ejemplo, cuando pidas un número te de un “1” y cuando, acto seguido, pidas otro te de un “2”.
¿Qué consecuencia tendría si el REGISTRO DE TRANSACCIONES o LOG DE TRANSACCIONES estuviera lleno?
Que cuando hagas algún borrado NO tendría efecto, es decir, se deshace al estar dicho registro lleno.
¿Qué indicamos cuando a la hora de crear una BD ponemos NOT NULL o VARCHAR (20) en un campo?
*NOT NULL => que el campo no admite valores nulos.
*varchar => que el campo admite valores alfanuméricos (números y letras), pero con un máximo de 20 caracteres.
¿Cómo se implementa una FOREIGN KEY?
1º Indicamos la columna que queremos que sea FOREIGN KEY (columna que hace referencia a otra tabla).
2º Con REFERENCES indicamos la tabla a la que hace referencia la columna FOREIGN KEY.
NOTA: que a la tabla, a lo que apunta es a la PRIMARY KEY de dicha tabla a la que hace referencia.
1º FOREIGN KEY columna_nominas
2º REFERENCES empleados
¿En qué caso se usa el operador LIKE?
Se puede usar en una expresión en la que queramos comparar un valor de campo con una expresión de cadena,
Ej: si escribes LIKE “C*” en una consulta SQL, la consulta devuelve todos los valores del campo que empiecen por la letra “C”.
Después de la sintaxis ALTER TABLE nombre_tabla …, ¿que podemos añadir?
…ADD COLUMN o ADD CONSTRAINT => para añadir columna o restricciones.
…ALTER COLUMN => para modificar columnas
…DROP COLUMN => para borrar columnas
¿Cómo se crearía la tabla: clientes?
CREATE TABLE clientes
(
ID int not null, => sin registros vacíos
NOMBRE varchar (20), => 20 es el límite de caracteres alfanuméricos del “Nombre”
TELÉFONO varchar (12) not null => en la última sentencia NO se pone la “,” para que el programa no quede esperando otra sentencia.
)
¿Cómo funciona el “isolation level” SERIALIZABLE?
No permite que las transacciones se ejecuten por partes cruzándose unas con otras, sino que las pone en fila (secuencialmente => 1 a 1).
Por lo cual, no genera ningún tipo de problema de lectura, es la + segura y es la que peor rendimiento (la mas lenta).
NOTA: usa los 3 tipos de bloqueos: rango, escritura y lectura. De hecho, EL BLOQUEO DE “RANGOS” SÓLO SE CONSIGUE CON EL SERIALIZABLE.
¿Para qué se usan los Isolation Level (Nivel de Aislamiento)?
Para aislar las transacciones, es decir, estas transacciones o unidades de trabajo hay que aislarlas unas de otras para que funcionen correctamente de manera conjunta.
Ej: parecido al algoritmo “Round Robin” => evitando que las transacciones que actúen sobre una misma tabla se contaminen mutuamente.
Hay 4 niveles de aislamiento:
*READ UNCOMMITED
*READ COMMITED
*REPETEABLE READ
*SERIALIZABLE
¿Cómo funciona el “isolation level” READ UN COMMITED?
A diferencia del SERIALIZABLE,este SI permite las transacciones cruzadas, con el despropósito de que al leer sobre una transacción que no se haya consolidado (COMMIT) puede provocar “Lectura Sucia”, ya que esos valores no consolidados (UN COMMITED) pueden ser borrados.
También se diferencia de SERIALIZABLE en que este usa los 3 tipos de bloqueos (lectura, escritora y rangos) y UN COMMITED no usa ninguno.
¿Para qué se “bloquean” las transacciones?
Existen 3 tipos (ESCRITURA, LECTURA Y RANGOS) y se usan para gobernar el aislamiento, es decir, si con la TX 1 bloqueo el registro ID=1, hasta que yo no termine de trabajar con él NO podrá manipular nada la TX 2.
NOTA: SERIALIZABLE usa los 3 bloqueos y READ UN COMMITED no usa ninguno.
Añadir que le bloqueo de RANGOS sólo se consigue con el nivel SERIALIZABLE.
¿Cuál es el nivel de aislamiento (isaltion lvl) que se usa por defecto?
READ COMMITED, porque sólo lee las transacciones que se han consolidado (COMMITED), evitando leer las que pueden borrarse y perder el tiempo con la “Lectura Sucia”. Aunque tiene problemas de “Lectura Repetible” y “Fantasma”.
¿Cómo funciona el “isolation level” REPETEABLE READ?
A diferencia de READ COMMITED (sólo lee las Tx COMMITED), este si puede leer la lectura anterior gracias al uso de bloqueos.
Sólo tiene problemas con la lectura fantasma, con la parte que no tenga bloqueada, pues sólo bloquea filas. Es decir, no tiene bloqueos de rangos (sólo SERIALIZABLE) => sólo puedo bloquear una fila, asi que si hago SELECT de varias filas puede producirse lectura fantasma
Usa los bloqueos de escritura y lectura.
.
¿Cómo se puede poner un “alias” en SQL?
as alias
¿Además de COLUMNAS que otras cosas se pueden poner con DISTINCT?
DISTINCT se usa para eliminar filas duplicadas en base a las columnas que pongas en la SELECT, pero, también se puede usar sobre FUNCIONES AGREGADAS (hacen un cálculo):
*SUM => devuelve la suma de un conjunto de valores en un campo.
COUNT => cuenta ( o columnas NOT NULL).
*MAX / MIN => calculan el máximo y mínimo.
*AVG => calcula la media.
¿Cómo borrar filas completas?
DELETE FROM nombre_tabla WHERE condiciones
NOTA: no existe => DELETE * FROM …
¿Para que sirven los operadores GROUP BY Y ORDER BY?
*GROUP BY => para hacer grupos de una tabla por si quiero hacer mi consulta sobre ciertos grupos.
*ORDER BY => para ordenar por uno o varios campos ascendente o descendentemente.
¿Para qué sirve el operador IN?
Con IN seleccionamos algo que este IN otra tabla.
¿Qué son las subconsultas o subquery?
Tienen una función parecida a las JOINS (cross join, left join, …). Es una SELECT de una tabla en la que necesitamos otra consulta para el predicado que ponemos después del WHERE.
Digamos que es una consulta dentro de otra consulta principal y se lleva a cabo con operadores como por ejemplo:
*IN: selecciona algo que haya dentro de otra tabla => … WHERE IN SELECT columna2 FROM …
*EXISTS: dará TRUE o FALSE dependiendo del resultado de la condición de la “subquery” => … WHERE EXISTS subquery
*Otros operadores de subquery: ALL, ANY o SOME.
Diferencia entre los operadores AND y OR de SQL:
Son para especificar condiciones y se usan tanto con la clausula WHERE con UPDATE.
*AND => mostrará los resultados cuando SE CUMPLAN las 2 condiciones:
SELECT nombre_columna FROM nombre_tabla WHERE condición 1 AND condición 2
OR => mostrará los resultados cuando se cumpla cualquiera de las 2 condiciones:
SELECT nombre_columna FROM nombre_tabla WHERE condición1 OR condición2
Esquematiza el disparador o TRIGGER:
Ejecuta de manera automática al sentencia del cuerpo del TRIGGER (entre BEGIN y END) cuando se produzca un determinado evento, es decir, NO se ejecuta manualmente.
1- TIPOS DE EVENTOS: especifcas que tipo de evento quieres que dispare tu TRIGGER.
a) De FILA: x cada fila afectada => FOR EACH ROW
b) De SENTENCIA: x toda una sentencia (STATEMENT) => FOR EACH STATEMENT
2- ACTIVADORES: Ej: queremos que actúe cuando se borre una fila.
a) AFTER: que actúe antes del evento.
b) BEFORE: que actúe o se dispare después del evento.
c) INSTEAD OF … (en lugar de …): anula la sentencia disparada y sólo tiene efecto el cuerpo del trigger.
*Se pueden combinar con: INSERT, UPDATE o DELETE => DML
EJEMPLOS:
1 => AFTER DELETE ON nombre_tabla FOR EACH ROW => se ejecuta ese Trigger antes de que borres cada fila, si borras 1000 filas, se ejecuta 1000 veces.
2 => AFTER DELETE ON nombre_tabla FOR EACH STATEMENT => aquí se ejecuta una sola vez, cuando se da dicha sentencia.
¿Cuáles son los sub-lenguajes de SQL?
El lenguaje de definición de datos (DDL). Contiene todas las instrucciones
para definir el esquema de una base de datos, como son: CREATE, ALTERy DROP o TRUNCATE.
- El lenguaje de manipulación de datos (DML). Contiene las instrucciones de
manejo de las tablas como son: SELECT, INSERT, DELETEy UPDATE. - El lenguaje de control de datos (DCL). Contiene aquellas instrucciones para
dar y revocar permisos de acceso a los datos de la base de datos, como son:
GRANTy REVOKE.
*TCL (Transaction Control Language), se utiliza para controlar las transacciones en una base de datos. Incluye comandos como COMMIT y ROLLBACK, que se utilizan para confirmar o revertir una transacción en una base de datos. Además de SAVEPOINT/RELEASE SAVEPOINT, que identifica un punto en una transacción a la que más tarde se puede volver. Y SET TRANSACTION / START TRANSACTION, para configurar inicio y fin de la transacción.