SQL es nuestro todo

Como probablemente ya adivine, todos los comandos al servidor SQL se pueden dar a través de consultas SQL. Todo.

Estos equipos se dividen oficialmente en 4 grupos:

  • declaraciones de definición de datos (lenguaje de definición de datos, DDL ):

    • CREATE crea un objeto de base de datos (base de datos en sí, tabla, vista, usuario, etc.)
    • ALTER cambia un objeto
    • DROP elimina un objeto
  • operadores de manipulación de datos (lenguaje de manipulación de datos, DML ):

    • SELECT selecciona datos que satisfacen las condiciones dadas
    • INSERT agrega nuevos datos
    • ACTUALIZAR cambia los datos existentes
    • DELETE elimina datos
  • operadores de definición de acceso a datos (lenguaje de control de datos, DCL ):

    • GRANT otorga a un usuario (grupo) permisos para realizar ciertas operaciones en un objeto
    • REVOKE revoca los permisos emitidos anteriormente
    • DENY establece una prohibición que tiene prioridad sobre un permiso
  • Declaraciones del lenguaje de control de transacciones ( TCL ) :

    • COMMIT aplica una transacción
    • ROLLBACK revierte todos los cambios realizados en el contexto de la transacción actual
    • SAVEPOINT divide una transacción en secciones más pequeñas

Y los primeros dos niveles, estudiamos solo variedades de la instrucción SELECT. Imagina cuántas cosas interesantes nos esperan en el futuro.

Pero nos estamos preparando aquí principalmente sobre programadores de Java, por lo que estudiaremos los escenarios que definitivamente encontrará en el trabajo.

Lo más probable es que el administrador del sistema en el proyecto cree todas las bases de datos, pero definitivamente tendrá que hacer una selección de los datos usted mismo muchas veces.

Además, a veces su código no escribirá todos los datos en la base de datos o los escribirá de manera incorrecta, por lo que a menudo tendrá que meterse en él con bolígrafos y ver qué está realmente almacenado allí.

Repasemos de nuevo las cosas que tocamos en conferencias anteriores.

Crear un esquema en una base de datos

Para crear un nuevo esquema en el DBMS, debe ejecutar el comando:

CREATE SCHEMA Name;

Esta es la opción más fácil. Además, al crear un nuevo esquema, puede especificar el formato de codificación de datos y otros parámetros.

Si desea eliminar el esquema, pero no está seguro de si existe, debe ejecutar el comando:

DROP SCHEMA IF EXIST Name;

A menudo verá estos comandos en archivos con copias de seguridad de diferentes bases de datos, por eso los traigo aquí.

Selección del esquema actual

Si tiene muchos esquemas en su DBMS, puede suceder fácilmente que diferentes esquemas tengan las mismas tablas. Para evitar confusiones, puedes hacer dos cosas:

  • Ponga siempre el nombre del esquema antes del nombre de la tabla
  • Especificar esquema predeterminado

Escribamos una consulta que seleccionará datos de la tabla de usuario , que se encuentra en el esquema de prueba . Se verá algo como esto:

SELECT * FROM test.user;

Esto es simplemente indispensable si necesita unir (JOIN) varias tablas de diferentes esquemas en una consulta.

Por cierto, en el lenguaje Java solemos hacer algo similar: si en el código necesitamos usar clases con el mismo nombre de diferentes paquetes, agregamos el nombre del paquete antes del nombre de la clase.

La segunda forma es especificar el esquema predeterminado . Si la consulta especifica un nombre de tabla pero no un esquema, se utiliza el esquema predeterminado. Para hacer esto, use la instrucción USE :

USE name - schemes;

Reescribamos la consulta anterior usando la instrucción USE:

USE test;
SELECT * FROM user;

Creación de una vista

Además de las tablas con datos reales, SQL le permite almacenar tablas virtuales, donde los datos se extraen de tablas reales. Tales tablas virtuales se llaman VISTA.

Dicha tabla no puede almacenar datos reales, y cada vez que se accede a ella, extrae datos de tablas reales. El contenido de dicha VISTA se especifica mediante una consulta SQL.

Puede crear una VISTA desde cualquier consulta SELECT con un comando como:

CREATE VIEW Name AS
SELECT-request;
Escribamos una consulta que creará una tabla virtual public_employee basada en la tabla de empleados, donde se ocultará la información del salario de los empleados:
CREATE VIEW public_employee AS
SELECT id, name FROM employee

En el ejemplo anterior, nuestra tabla (VER) public_employee solo contendrá las identificaciones de los empleados y sus nombres, pero no información sobre su salario. Puede usar dichas vistas en el mismo lugar que las tablas reales.

¿Por qué son necesarias las Vistas? Tienen una serie de ventajas:

Control flexible de acceso a la información . Puede dar acceso a ciertos usuarios solo a VER, pero no para dar acceso a las tablas. Y en View, saca solo la información pública de las tablas. Además, si se agregan nuevas columnas con información importante a las tablas en el futuro, no entrará accidentalmente en la Vista.

Desnormalización de datos . Para la conveniencia del almacenamiento, los datos a menudo se dividen en cientos y miles de tablas, pero no es muy conveniente para una persona común trabajar con dichos datos; debe escribir consultas demasiado complejas. Con View, puede crear tablas virtuales que muestren datos de docenas de tablas diferentes en una sola tabla.

Polimorfismo y Encapsulación . Puede cambiar las estructuras de su base de datos. Al mismo tiempo, los usuarios del programa que trabajan con sus Vistas no adivinarán que algo ha cambiado. Y no habrá necesidad de reescribir el código de los programas que tienen acceso a View. Solo necesitará modificar el script SQL relacionado con VIEW.

Solo lectura . View solo se puede configurar con una consulta SELECT, por lo que trabajar con View no puede cambiar los datos en tablas reales de ninguna manera. Por cierto, esta es otra ventaja a favor del almacenamiento en caché de consultas. Pero más sobre eso la próxima vez.