Creado la carpeta de tecnicisomos y Uso general en SQL.
Creado Notas para clase en SQL.
This commit is contained in:
86
BDD/SQL/Tecnicismos/Disparadores.md
Normal file
86
BDD/SQL/Tecnicismos/Disparadores.md
Normal file
@@ -0,0 +1,86 @@
|
||||
#SQL-ASIX - Structure Query Language
|
||||
Proveniente de [[SQL]]
|
||||
|
||||
---
|
||||
Un **trigger** o **disparador** es un objeto que se asocia con tablas y se almacenan en la base de datos. Su nombre se deriva por el comportamiento que presentan en su funcionamiento, ya que se ejecutan cuando sucede algún evento sobre las tablas a las que se encuentra asociado. Los eventos que hacen que se ejecute un trigger son las operaciones de inserción (`INSERT`), borrado (`DELETE`), o actualización (`UPDATE`), ya que modifican los datos de una tabla.
|
||||
|
||||
La utilidad principal de un trigger es mejorar la gestión de la base de datos, ya que no requieren que un usuario los ejecute. Por lo tanto, son empleados para implementar las [[Reglas de negocio|reglas de negocio]] (tipo especial de integridad) de una base de datos. Una regla de negocio es cualquier restricción, requerimiento, necesidad o actividad especial que debe ser verificada al momento de intentar agregar, borrar o actualizar la información de una base de datos. Los triggers pueden prevenir errores en los datos, modificar valores de una lista, sincronizar tablas, entre otros.
|
||||
|
||||
---
|
||||
## Combinaciones
|
||||
La acción del trigger, siempre que no se viole la restricción del trigger se ejecuta dependiendo de la combinación de tipos de trigger:
|
||||
|
||||
- **Before statement**: Antes de ejecutar el disparo.
|
||||
- **Before row**: Antes de modificar cada fila afectada por la sentencia de disparo y antes de chequear las restricciones de integridad apropiadas.
|
||||
- **After statement**: Después de ejecutar la sentencia del disparo y después de chequear las restricciones de integridad apropiadas.
|
||||
- **After row**: Después de modificar cada fila afectada por la sentencia del disparo y posiblemente aplicando las restricciones de integridad apropiadas.
|
||||
|
||||
|
||||
---
|
||||
## Componentes principales
|
||||
Estructura básica de un "trigger":
|
||||
- **Llamada de activación**: Es la sentencia que permite "disparar" el código a ejecutar.
|
||||
- **Restricción**: Es la condición necesaria para realizar el código. Esta restricción puede ser de tipo condicional o de tipo nulidad.
|
||||
- **Accón a ejecutar**: Es la secuencia de instrucciones a ejecutar una vez que se han cumplido las condiciones iniciales.
|
||||
|
||||
---
|
||||
## Tipos
|
||||
|
||||
Existen dos tipos de disparadores que se clasifican según la cantidad de ejecuciones a realizar:
|
||||
- ***Row Triggers*** (o Disparadores de fila): Son aquellas que se ejecutaran cada vez que se llama al disparador desde la tabla asociada al trigger.
|
||||
- ***Statement Triggers*** (o Disparadores de secuencia): Son aquellos que, sin importar la cantidad de veces que se cumpla con la condición, su ejecución es única.
|
||||
Pueden ser de sesión y almacenados; pero no son recomendables.
|
||||
|
||||
|
||||
---
|
||||
## Efectos y características
|
||||
- No aceptan parámetros o argumentos (pero podrían almacenar los datos afectados en tablas temporales).
|
||||
- No pueden ejecutar las operaciones ***COMMIT*** o ***ROLLBACK*** porque estas son parte de la sentencia SQL del disparador (únicamente a través de transacciones autónomas).
|
||||
- Pueden causar errores de mutaciones en las tablas, si se han escrito de manera deficiente.
|
||||
|
||||
---
|
||||
## Ejemplos
|
||||
Ejemplo sencillo para SQL Server sería crear un ***Trigger*** para insertar un pedido de algún producto cuando la cantidad de este, en nuestro almacén, sea inferior a un valor dado.
|
||||
```SQL
|
||||
CREATE TRIGGER TR_ARTICULO
|
||||
ON ARTICULOS
|
||||
AFTER UPDATE
|
||||
AS
|
||||
BEGIN
|
||||
INSERT INTO HCO_ARTICULO
|
||||
(IDARTICULO, STOCK, FECHA)
|
||||
SELECT ID_ARTICULO, STOCK, GETDATE()
|
||||
FROM INSERTED
|
||||
END
|
||||
INSERT INTO ARTICULOS VALUES (1, 'MEMORIA', 12, '12/03/2015')
|
||||
|
||||
SELECT * FROM ARTICULOS
|
||||
|
||||
UPDATE ARTICULOS
|
||||
SET STOCK = STOCK -20
|
||||
WHERE ID_ARTICULO = 1
|
||||
|
||||
SELECT * FROM HCO_ARTICULO
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
## Disparadores en MySQL
|
||||
Los disparadores son soportados en MySQL a partir de la versión 5.0.2. Algunos de los soportes existentes son los disparadores para las sentencias *INSERT, UPDATE y DELETE*.
|
||||
|
||||
El estándar SQL:2003 requiere que los disparadores den a los programadores acceso a las variables de un registro utilizando una sintaxis como *REFERENCING NEW AS n*. Por ejemplo, si un disparador está monitoreando los cambios en la columna *salario*, podría escribirse un disparador como:
|
||||
```SQL
|
||||
CREATE TRIGGER ver_salario
|
||||
BEFORE UPDATE ON empleados
|
||||
REFERENCING NEW ROW AS n, OLD ROW AS o
|
||||
FOR EACH ROW
|
||||
IF n.salario <> o.salario THEN
|
||||
END IF;
|
||||
```
|
||||
|
||||
Como en MySQL las sentencies se ejecutan luego de escribir el signo punto y coma (;), cabe destacar que para crear un disparador en MySQL, antes se escribe la sentencia *DELIMITER* seguida de un carácter tal como |, la cual asigna la función del punto y coma a otro carácter permitiendo que el disparador sea escrito usando los puntos y comas sin que se ejecute mientras se escribe; después de escrito el disparador se escribe nuevamente a la sentencia ***DELIMITER;***, para asignar al punto y coma su función habitual.
|
||||
|
||||
---
|
||||
##### Enlaces externos
|
||||
|
||||
- [Trigger (base de datos) - Wikipedia, la enciclopedia libre](https://es.wikipedia.org/wiki/Trigger_(base_de_datos))
|
||||
@@ -0,0 +1,5 @@
|
||||
#SQL-ASIX - Structure Query Language
|
||||
Proveniente de [[SQL]]
|
||||
|
||||
---
|
||||
En SQL, el Lenguaje de Manipulación de Datos (DML)
|
||||
43
BDD/SQL/Tecnicismos/Lenguaje de definición de datos (DDL).md
Normal file
43
BDD/SQL/Tecnicismos/Lenguaje de definición de datos (DDL).md
Normal file
@@ -0,0 +1,43 @@
|
||||
---
|
||||
|
||||
---
|
||||
#SQL-ASIX - Structure Query Language
|
||||
Proveniente de [[SQL]]
|
||||
|
||||
---
|
||||
El Lenguaje de definición de datos, es el que se encarga de la modificacion de la estructurea de objetos de la base de datos. Incluye ordenes para modificar, borrar o definir las tablas en las que se almacenan los datos de la base de datos.
|
||||
Exsten cuatro operaciones basicas: CREATE, ALTER, DROP y TRUNCATE.
|
||||
|
||||
## CREATE (Crear)
|
||||
Este comando permite crear objetos de datos, como nuevas bases de datos, tablas, vistas y [[Procedimientos almacenados|procedimientos almacenados]].
|
||||
#### Ejemplo (Crear una tabla)
|
||||
|
||||
```SQL
|
||||
CREATE TABLE clientes;
|
||||
```
|
||||
|
||||
## Alter (Alterar)
|
||||
Este comando permite modificar la estructura de una tabla u objeto. Se pueden agregar/quitar campos de una tabla, modificar el tipo de un campo, agregar/quitar indices a una tabla, modificar un trigger, etc.
|
||||
|
||||
##### Ejemplo (Agregar columna a una tabla)
|
||||
|
||||
```SQL
|
||||
ALTER TABLE alumnos ADD edad INT UNSIGNED;
|
||||
```
|
||||
|
||||
## DROP (Eliminar)
|
||||
Este comando elimina un objeto de la base de datos. Puede ser una tabla, vista, indice, trigger, funcion, procedimiento o cualquier objeto que el motor de la base de datos soporte. Se puede combinar con la sentencia ALTER.
|
||||
|
||||
##### Ejemplo
|
||||
|
||||
```SQL
|
||||
DROP TABLE alumnos;
|
||||
```
|
||||
|
||||
## TRUCATE (Truncar)
|
||||
Este comando solo aplica a tablas y su funcion es borrar el contenido completo de la tabla especificada. La ventaja sobre el comando DELETE, es que si se quiere borrar todo el contenido de la tabla, es mucho mas rapido, especialmente si la tabla es muy grande. La desventaja es que TRUNCATE solo sirve cuando se quiere eliminar absolutamente todos los registros, ya que no se permite la clausula WHERE. Si bien, en un principio, esta sentencia pareceria ser [[Lenguaje de Manupulación de Datos (DML)]], es en realidad una DDL, ya que internamente, el comando TRUNCATE borra la tabla y la vuelve a crear y no ejecuta ninguna transacción.
|
||||
|
||||
##### Ejemplo
|
||||
```SQL
|
||||
TRUNCATE TABLE nombre_tabla;
|
||||
```
|
||||
32
BDD/SQL/Tecnicismos/Procedimientos almacenados.md
Normal file
32
BDD/SQL/Tecnicismos/Procedimientos almacenados.md
Normal file
@@ -0,0 +1,32 @@
|
||||
#SQL-ASIX - Structure Query Language
|
||||
Proveniente de [[SQL]]
|
||||
|
||||
---
|
||||
En SQL, un **procedimiento almacenado (*stored procedure*** en inglés) es un programa o procedimiento almacenado físicamente en una base de datos. Su implementación varía de un gestor de base de datos a otro. **La ventaja de un procedimiento almacenado** es que al ser ejecutado, en respuesta a una petición del usuario, es ejecutado directamente en el motor de base de datos, el cual usualmente corre en un servidor separado. Como tal, posee acceso directo a los datos que necesita manipular y solo necesita enviar grandes cantidades de datos salientes y entrantes.
|
||||
|
||||
Los procedimientos pueden ser ventajosos: cuando una base de datos es manipulada desde muchos programas externos. Al incluir una lógica de aplicación en la base de datos utilizando procedimientos almacenados, la necesidad de embeber la misma lógica en todos los programas que acceden a los datos es reducida. Esto puede simplificar la creación y, particularmente, el mantenimiento de los programas involucrados.
|
||||
|
||||
Podemos ver un claro ejemplo de estos procedimientos cuando requerimos realizar una misma operación en un servidor dentro de algunas o todas las bases de datos y a la vez dentro de todas o algunas de las tablas de las bases de datos al mismo tiempo. Para ello podemos utilizar a los procedimientos almacenados auto creables que es una forma de generar ciclos redundantes a través de los procedimientos almacenados.
|
||||
|
||||
## Implementación
|
||||
---
|
||||
Estos procedimientos se usan a menudo, pero no siempre, para realizar consultas [[SQL]] sobre los objetos de la base de datos de una manera abstracta, desde el punto de vista del cliente de la aplicación. Un **procedimiento almacenado** permite agrupar en forma exclusiva parte de algo específico que se desee realizar o, mejor dicho, el SQL apropiado para dicha acción.
|
||||
|
||||
## Usos
|
||||
---
|
||||
Los usos típicos de los **procedimientos almacenados** se aplican en la validación de datos, integrados dentro de la estructura del banco de datos. Los **procedimientos almacenados** usados con tal propósito se llaman comúnmente [[Disparadores|disparadores, o triggers]]. Otro uso común es la 'encapsulación' de una API para un proceso complejo o grande que podría requerir la 'ejecución' de varias consultas SQL, tales como la manipulación de un conjunto de datos enorme para producir un resultado resumido.
|
||||
|
||||
También pueden ser usados para el control de gestión de operaciones, y ejecutar procedimientos almacenados dentro de una transición, de tal manera que las transiciones sean efectivamente transparentes para ellos.
|
||||
|
||||
## Ventajas
|
||||
---
|
||||
La ventaja de un **procedimiento almacenado**, en respuesta a una petición de usuario, está directamente bajo el control del motor del gestor de bases de datos, que corre generalmente en un servidor distinto del servidor web, aumentando con ello la rapidez de procesamiento de las peticiones del usuario. El servidor de la base de datos tiene acceso directo a los datos necesarios para manipular y solo necesita enviar el resultado final al usuario. Los datos, que pueden simplificar la gestión de datos y reducir la necesidad de codificar la lógica en el resto de los programas cliente. Esto puede reducir la probabilidad de que los datos se corrompan por el uso de programas clientes defectuosos o erróneos. De este modo, el motor de base de datos puede asegurar la integridad de los datos y su consistencia con la ayuda de procedimientos almacenados. Algunos afirman que las bases de datos deben ser utilizadas para el almacenamiento de datos solamente, y que la lógica de negocio solo debería aplicarse en la capa de negocio del código, a través de aplicaciones cliente que deban acceder a los datos. Sin embargo, el uso de procedimientos almacenados no se opone a la utilización de una capa de negocio.
|
||||
|
||||
El siguiente es un ejemplo de procedimiento almacenado en MySQL:
|
||||
```SQL
|
||||
CREATE PROCEDURE nombreProcedimiento([parametro1, parametro2,...])
|
||||
[Atributos]
|
||||
BEGIN Instrucciones
|
||||
END
|
||||
```
|
||||
|
||||
18
BDD/SQL/Tecnicismos/Sintaxis (Keywords).md
Normal file
18
BDD/SQL/Tecnicismos/Sintaxis (Keywords).md
Normal file
@@ -0,0 +1,18 @@
|
||||
#SQL-ASIX - Structure Query Language
|
||||
Proveniente de [[SQL]]
|
||||
|
||||
---
|
||||
SQL es non-case sensitive, entonces no es necesario indicar las keywords en mayúscula, pero la recomendación y lo aceptado es siempre poner las keywords e instrucciones en mayúscula, por ejemplo:
|
||||
|
||||
```sql
|
||||
SELECT empleados WHERE dat
|
||||
```
|
||||
|
||||
Las keywords de SQL son:
|
||||
- SELECT - Sirve para seleccionar tablas o bases de datos que haya disponibles.
|
||||
- INSERT - Sirve
|
||||
- UPDATE
|
||||
- DELETE
|
||||
- DROP
|
||||
|
||||
|
||||
59
BDD/SQL/Tecnicismos/Tipos de datos.md
Normal file
59
BDD/SQL/Tecnicismos/Tipos de datos.md
Normal file
@@ -0,0 +1,59 @@
|
||||
#SQL-ASIX - Structure Query Language
|
||||
Proveniente de [[SQL]]
|
||||
|
||||
---
|
||||
SQL maneja varios tipos de datos. Estos tipos de datos se diferencian para la introduccion de datos en especifico, datos con cierta cantidad de letras o numeros, o un numero especifico de caracteres.
|
||||
|
||||
Algunos de los tipos de datos basicos de SQL son:
|
||||
|
||||
---
|
||||
## Numeros enteros:
|
||||
- **TINYINT(Tamaño)**: -128 a 127 normal. 0 a 255 sin signo. La cantidad maxima de digitos se puede especificar entre parentesis.
|
||||
- **SMALLINT(Tamaño)**: -32768 a 32767 normal. 0 a 65535 sin signo. La cantidad maxima de digitos se pueden especificar entre parentesis.
|
||||
- **MEDIUMINT(Tamaño)**: -8388608 a 8388607 normal. 0 a 16777215 sin signo. La cantidad maxima de digitos se pueden especificar entre parentesis.
|
||||
- **INT(Tamaño)**: -2147483648 a 2147483647 normal. 0 a 4294967295 sin signo. La cantidad maxima de digitos se pueden especificar entre parentesis.
|
||||
- **BIGINT(Tamaño)**: -9223372036854775808 a 9223372036854775807 normal. 0 a 18446744073709551615 sin signo. La cantidad maxima de digitos se pueden especificar entre parentesis.
|
||||
|
||||
---
|
||||
## Numeros en punto flotante
|
||||
- **FLOAT(tamaño, d)**: Un pequeño numero con un punto decimal flotante. La cantidad maxima de digitos puede especificar en el parametro de tamaño. El numero maximo de digitos a la derecha del punto decimal se especifica en el parametro d.
|
||||
- **DECIMAL(tamaño, d)**: Un DOBLE almacenado como una cadena, lo que permite un punto decimal fijo. La cantidad maxima de digitos se puede especificar en el parametro de tamaño. El numero maximo de digitos a la derecha del punto decimal se especifica en el parametro d.
|
||||
|
||||
---
|
||||
## Fechas y tiempos
|
||||
- **DATE ()**: Una fecha. Formato: AAAA-MM-DD.
|
||||
- **DATETIME ()**: Una combinacion de fecha y hora. Formato: AAAA-MM-DD HH:MI:SS.
|
||||
- **TIMESTAMP ()**: Una marca de tiempo. Los valores de TIMESTAMP se almacenan como el numero de segundos desde la epoca de UNIX ('1970-01-01 00:00:00' UTC). Formato: AAAA-MM-DD HH:MI:SS.
|
||||
- **TIME ()**: Un tiempo. Formato: HH:MI:SS.
|
||||
- **YEAR ()**: Un año en formato de dos o cuatro digitos.
|
||||
|
||||
> [!bug] Nota
|
||||
> Para DATE, El rango admitido es de '1000-01-01' a '9999-12-31'.
|
||||
> Para DATETIME, el rango admitido es de '1000-01-01 00:00:00' a '9999-12-31 23:59:59'
|
||||
> Para TIMESTAMP, el rango admitido es de '1970-01-01 00:00:01' UTC a '2038-01-09 03:14:07' UTC.
|
||||
> Para TIME, el rango admitido es de '-838:59:59' a '838:59:59'
|
||||
> Para YEAR, los valores permitidos van en 4 digitos: de 1901 a 2155. Valores permitidos en formato de dos digitos: 70 a 69, que representan los años de 1970 a 2069.
|
||||
|
||||
---
|
||||
## Cadena de caracteres:
|
||||
- **CHAR (Tamaño)**: Cadena de longitud fija (puede contener letras, numeros y caracteres especiales), El tamaño fijo se especifica entre parentesis. Puede almacenar hasta 255 caracteres.
|
||||
- **VARCHAR(Tamaño)**: Tiene una cadena de longitud variable (puede contener letras, numeros y caracteres especiales). El tamaño maximo se especifica entre parentesis. Puede almacenar hasta 255 caracteres.
|
||||
- **TINYTEXT**: Tiene una cadena con una longitud maxima de 255 caracteres
|
||||
- **TEXTO**: Tiene una cadena con una longitud maxima de 65535 caracteres.
|
||||
- **BLOB**: Para BLOB (Objetos grandes binarios). Almacena hasta 65535 bytes de datos.
|
||||
- **MEDIUMTEXT**: Tiene una cadena con una longitud maxima de 16777215 caracteres.
|
||||
- **MEDIUMBLOB**: Para BLOB (Objetos grandes binarios). Puede almacenar 16777215 bytes de datos.
|
||||
- **LONGTEXT**: Tiene una cadena con una longitud maxima de 4294967295 caracteres.
|
||||
- **LONGBLOB**: Para BLOB (Objetos grandes binarios). Tiene una capacidad para 4294967295 bytes de datos.
|
||||
|
||||
>[!bug]
|
||||
> Nota: Si, en VARCHAR, agregas un valor mas grande que 255, este se convertira en tipo TEXTO.
|
||||
|
||||
---
|
||||
## ENUM y SET
|
||||
- **Enum (x, y, z, etc.)**: Permite ingresar una lista de valores posibles. Puede enumerar hasta 65535 valores en una lista ENUM. Si se inserta un valor que no esta en la lista, se insertará un valor en blanco.
|
||||
- **Set**: Similar a Enum, excepto que SET puede contener hasta 64 elementos de una lista y puede almacenar mas de opcion
|
||||
|
||||
---
|
||||
## Binarios:
|
||||
- **bit** Entero que puede ser 0, 1 o NULL.
|
||||
Reference in New Issue
Block a user