b3t4 - SQL Flashcards
Que tipo de lenguaje es el Sql? Generacion y delcararivo/imperativo
Es un lenguaje de 4gl (4º generación) declarativo + una extensión procedural
Cuál es el standar ISO de SQL?
ISO 9075
Antes era ANSI-86 y luego ANSI-92
Cuál fué la versión del standar SQL que ya incluyó SQL3 con triggers?
SQL3
ISO9075 - SQL:1999
Cuál es la última versión del stadar de SQL?
ISO9075 - SQL:2016 (compatibilidad con json)
Qué es SQL/PSM?
Persistent Stored modules: Es la extensión del standar ISO9075 de SQL que es el lenguaje procedural en lugar de declarativo, que se usa en los procedimientos almacenados
Por ejemplo el Oracle PL/SQL o Sybase Transact-SQL está derivado de este standar
Qué es SQLite?
Es un formato de ficheros y una librería que usa ese fichero y que entiende el estandar SQL y transacciones sobre ese fichero. Es para uso local, no es cliente-servidor. Se usa en Android
Qué son cada uno de estos sublenguajes de SQL?
DDL
DML
DCL
DDL -> Data Definition Languaje -> Creación, borrado, eliminarción de objetos
DML -> Data Manipulation Languaje -> consulta/borrado/modificación/inserción de datos
DCL -> Data Control Languaje -> Control sobre permisos, transacciones, etc … -> Dentro está el TCL (Transaction Control Languaje)
Sentencias de DML
SELECT
UPDATE
INSERT
DELETE
MERGE
TRUNCATE *
SELECT (joins, agrupaciones, consultas)
UPDATE
INSERT
DELETE
MERGE -> mezcla de registros de una tabla sobre otra
TRUNCATE -> (es DML o DDL) -> borra los datos de una tabla. Sin tener en cuenta las transacciones
Sentencias de DDL
CREATE
DROP
ALTER
TRUNCATE*
CREATE -> crear
DROP -> borrar
ALTER -> modificar
TRUNCATE -> (es DML o DDL) -> borra los datos de una tabla. Sin tener en cuenta las transacciones
+
TABLE
INDEX
VIEW
PROCEDURE
SEQUENCE
FUNCTION
TYPE -> tipos compuestos de datos
TRIGGER
DOMAIN -> dominio de valores
SCHEMA -> una forma de agrupar tablas para subsistemas funcionales
ROLE -> para asignar permisos y funcionalidades a ese rol. El rol se asigna a usuarios
Sentencias de DCL
CALL procedure
GRANT
REVOKE
COMMIT/ROLLBACK
SAVEPOINT
SET TRANSACTION / START TRANSACTION
CALL procedure -> para llamar a procedimientos almacenados
GRANT -> dar permisos
REVOKE -> quitar permisos
TCL —————
COMMIT/ROLLBACK -> confirmar o deshacer los cambios en una transacción
SAVEPOINT -> poner un savepoint, para que si se hace rollback sólo se deshace a partir del savepoint /RELEASE SAVEPOINT (para quitar el savepoint)
SET TRANSACTION / START TRANSACTION -> Configurar e iniciar una transacción
Mirar cómo se hacen en los distintos gestores de bbdd (oracle, mysql, postgres, sqlserver)
create index
create view
call
funciones de fechas y cadenas
Constraints
CHECK
PRIMARY KEY
UNIQUE
FOREIGN KEY
CHECK -> establecer condiciones que ha de cumplir el valor del campo
PRIMARY KEY
UNIQUE -> admite 1 solo null en toda la columna
FOREIGN KEY
Sintaxis de CREATE y las distintas CONSTRAINT
CREATE TABLE nombre-tabla (campo1 CHAR(4) not null, campo 2 INT, …),
CONSTRAINT nombre-constraint PRIMARY KEY (campo key),
CONSTRAINT nombre-constraint FOREIGN KEKY (campo fk) REFERENCES tabla_referenciada (campo_referenciado),
CONSTRAINT nombre-constraint UNIQUE (campo),
CONSTRAINT nombre-constraint CHECK (condición o exp regular)
Sintaxis ALTER TABLE, y sus distintas opciones para
añadir columna
modificar columna
eliminar columna
añadir restriccion
ALTER TABLE nombre_tabla ADD COLUMN nombre_col tipo_dato atributos
ALTER TABLE nombre_tabla ALTER COLUMN nombre_col SET DEFAULT/SET NOT NULL/SET DATA TYPE tipo dato
ALTER TABLE nombre_tabla DROP COLUMN nombre_col
ALTER TABLE nombre_tabla ADD CONSTRAINT…
Sintáxis de GRANT
GRANT tipo-privilegio ON objeto TO destinatario-privilegio [WITH GRANT OPTIONS]
- tipo privilegio: (SELECT, UPDATE, INSERT, DELETE, REFERENCES (para poder hacer fks)) + columnas, ALL, USAGE (ej. secuencia), EXECUTE
- objeto: tabla, vista, …
- destinatario-privilegio: usuario, rol
- WITH GRANT OPTIONS: para que el destinatario del permiso también pueda darlo a otros. Delegación de permisos
Sintáxis REVOKE
REVOKE privilegio ON objeto FROM destinatario-privilegio
En qué consisten los siguentes niveles de aislamiento que se pueden configurar en un monitor de transacciones de una base de datos?
READ UNCOMMITED
READ COMMITED
REPEATABLE READ
SERIALIZABLE
READ UNCOMMITED -> (lectura no confirmada) se permite leer los datos de las transacciones no comiteadas
READ COMMITED -> (lectura confirmada) solo se pueden leer los datos de transacciones comiteadas
REPEATABLE READ (lectura repetible)-> no permite durante una transacción que otra transacción haga commits, mediante bloqueos de registro
SERIALIZABLE (serializable)-> todas las transacciones una detrás de otra, no da problemas de concurrencia, es que peor rendimiento tiene
Ver el vídeo para entender los niveles de las transacciones
https://www.youtube.com/watch?v=ky7zUJwfWQc
Qué son los problemas de concurrencia siguientes y a qué niveles de aislamiento de transacciones afecta?
Lectura sucia
Lectura no repetible
Lectura fantasma
Lectura sucia -> Cuando se permite leer los datos no comiteados de otra transacción
Lectura no repetible -> Ocurre cuando a lo largo de una transacción, la misma lectura que se haga varias veces y de datos distintos, porque entre una lectura y otra haya comiteado otra transacción
Lectura fantasma -> Cuando en la lectura se leen un rango de registros, y no se puede solucionar por bloqueos porque no se pueden bloquean rangos, si otra transacción inserta, modifica, etc … ya hay lectura fantasma