0% encontró este documento útil (0 votos)
29 vistas24 páginas

2.B. SQL

Cargado por

Navil Lugo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
29 vistas24 páginas

2.B. SQL

Cargado por

Navil Lugo
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

20/10/22, 11:03 2.B.

SQL

2.B. SQL

Sitio: ALONSO DE AVELLANEDA Imprimido por: Navil Lugo Taveras


Curso: Bases de Datos (Grupo A) Día: jueves, 20 de octubre de 2022, 11:03
Libro: 2.B. SQL

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 1/24
20/10/22, 11:03 2.B. SQL

Tabla de contenidos

1. Introducción

2. Elementos del lenguaje. Normas de escritura.

3. Lenguaje de descripción de datos (DDL)


3.1. Creación de bases de datos. Objetos de la base de datos
3.2. Creación de tablas
3.3. Restricciones
3.4. Restricción NOT NULL
3.5. Restricción UNIQUE
3.6. Restricción PRIMARY KEY
3.7. Restricción Clave ajena. REFERENCES. FOREIGN KEY.
3.8. Restricciones DEFAULT y CHECK
3.9. Eliminación de tablas - DROP TABLE
3.10. Modificación de tablas - ALTER TABLE
3.11. Modificación de tablas - ALTER TABLE sobre restricciones
3.12. Creación y eliminación de Indices - CREATE INDEX y DROP INDEX

4. Lenguaje de control de datos (DCL)


4.1. Permisos - GRANT
4.2. Permisos - REVOKE

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 2/24
20/10/22, 11:03 2.B. SQL

1. Introducción

SQL (Structured Query Language) es el lenguaje fundamental de los SGBD relacionales. Es uno de los lenguajes más utilizados en informática
en todos los tiempos. Es un lenguaje declarativo y por tanto, lo más importante es definir qué se desea hacer, y no cómo hacerlo. De esto
último ya se encarga el SGBD.

Hablamos por tanto de un lenguaje normalizado que se puede utilizar con cualquier tipo de lenguaje (Java, C#, PHP) en combinación con
cualquier tipo de base de datos (Access, SQL Server, MySQL, Oracle, etc.).

El hecho de que sea estándar no quiere decir que sea idéntico para cada base de datos. Así es, determinadas bases de datos implementan
funciones específicas que no tienen necesariamente que funcionar en otras.

Aunque SQL está estandarizado, siempre es recomendable revisar la documentación del SGBD con el que estemos trabajando para conocer
su sintaxis concreta, ya que algún comando, tipo de dato, etc., puede no seguir el estándar.

SQL posee dos características muy apreciadas, potencia y versatilidad, que contrastan con su facilidad para el aprendizaje, ya que utiliza un
lenguaje bastante natural. Es por esto que las instrucciones son muy parecidas a órdenes humanas. Por esta característica se le considera
un Lenguaje de Cuarta Generación.

Aunque frecuentemente oigas que SQL es un "lenguaje de consulta", ten en cuenta que no es exactamente cierto ya que contiene muchas
otras capacidades además de la de consultar la base de datos:

La definición de la propia estructura de los datos,


Su manipulación,
La especificación de conexiones seguras.

Por tanto, el lenguaje estructurado de consultas SQL es un lenguaje que permite operar con los datos almacenados en las bases de datos
relacionales.

Para saber más


Ya hemos llegado a los lenguajes de quinta generación, en el siguiente enlace puedes ver sus características más generales - Generaciones
de lenguajes de programación

En este enlace encontrarás de una manera breve, pero interesante, la historia del SQL. - Historia de SQL.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 3/24
20/10/22, 11:03 2.B. SQL

2. Elementos del lenguaje. Normas de escritura.

Imagínate que cada programador utilizara sus propias reglas para escribir. Esto sería un caos. Es muy importante establecer los elementos
con los que vamos a trabajar y unas normas que seguir.

El lenguaje SQL está compuesto por comandos, cláusulas, operadores, funciones y literales. Todos estos elementos se combinan en las
instrucciones y se utilizan para crear, actualizar y manipular bases de datos. Estos conceptos son bastante amplios por eso será mejor que
vayamos por partes.

COMANDOS: se pueden distinguir tres grupos que veremos con más detenimiento a lo largo de las siguientes unidades:
De definición de datos (DDL, Data Definition Language), que permiten crear y definir nuevas bases de datos, tablas, campos, etc.
De manipulación de datos (DML, Data Manipulation Language), que permiten generar consultas para ordenar, filtrar y extraer datos de
la base de datos.
De control y seguridad de datos (DCL, Data Control Language), que administran los derechos y restricciones de los usuarios.
CLÁUSULAS: llamadas también condiciones o criterios, son palabras especiales que permiten modificar el funcionamiento de un
comando.
OPERADORES: permiten crear expresiones complejas. Pueden ser aritméticos (+, -, *, /, ...) o lógicos (< , >, , < >, And, Or, etc.).
FUNCIONES: consiguen el encapsulado y reutilización de operaciones complejas. Por ejemplo, la función promedio para obtener la media
de un salario.
LITERALES: Les podemos llamar también constantes y serán valores concretos, como por ejemplo un número, una fecha, un conjunto de
caracteres, etc.

Tendremos que seguir unas normas sencillas pero primordiales:

Todas las instrucciones terminan con un signo de punto y coma.


No se distingue entre mayúsculas y minúsculas.
Cualquier instrucción puede ser partido con saltos de línea o espacios para facilitar su lectura y comprensión.
Los comentarios comienzan por /* y terminan con */ (excepto en algunos SGBD).

Para saber más


Otro Sistema Gestor de Base de Datos muy utilizado en algunos entornos como el de desarrollo web es MySQL. Sería interesante que lo
conocieras y supieras instalarlo - Documentación MySQL.

Otra página recomendable donde puedes aprender MySQL desde cero es la siguiente - MySQL con Clase.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 4/24
20/10/22, 11:03 2.B. SQL

3. Lenguaje de descripción de datos (DDL)

La primera fase del trabajo con cualquier base de datos comienza con sentencias DDL, puesto que antes de poder almacenar y recuperar
información debemos definir las estructuras donde almacenar la información. Las estructuras básicas con las que trabaja SQL son las tablas.

Conocer el Lenguaje de Definición de Datos (DDL) es imprescindible para crear, modificar y eliminar objetos de la base de datos (es decir, los
metadatos). En el mercado hay suficientes aplicaciones y asistentes que nos facilitan esta labor, a través de una interfaz visual que nos
oculta el lenguaje SQL y en los cuales nos limitamos a poner nombres a los campos, elegir el tipo de datos y activar una serie de
propiedades.

Es cierto que estas herramientas nos facilitan el trabajo, pero resulta imprescindible comprender y conocer en profundidad el lenguaje, ya
que nos veremos en muchas situaciones donde necesitaremos crear un objeto, modificarlo o eliminarlo sin depender de esas herramientas
visuales.

En Oracle, cada usuario de una base de datos tiene un esquema, que tendrá el mismo nombre que el usuario con el que se ha accedido y
sirve para almacenar los objetos que posea ese usuario.

¿De qué objetos estamos hablando? Éstos podrán ser tablas, vistas, índices u otros objetos relacionados con la definición de la base de
datos. ¿Y quién puede crear y manipularlos? En principio el usuario propietario (el que los creó) y los administradores de la base de datos.
Más adelante veremos que podemos modificar los privilegios de los objetos para permitir el acceso a otros usuarios.

Las instrucciones DDL generan acciones que no se pueden deshacer, por eso es conveniente usarlas con precaución y tener copias de
seguridad cuando manipulamos la base de datos.

Para saber más

Si quieres saber un poco más sobre el Lenguaje de Definición de Datos, puedes visitar la Wikipedia, aquí tienes el enlace - Lenguaje de
Definición de Datos

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 5/24
20/10/22, 11:03 2.B. SQL

3.1. Creación de bases de datos. Objetos de la base de datos

Básicamente, la creación de la base de datos consiste en crear las tablas que la componen. Aunque antes de ésto tendríamos que definir un
espacio de nombres separado para cada conjunto de tablas. Es lo que antes hemos llamado esquemas ( en Oracle van asociados
a usuarios).

Crear una base de datos implica indicar los archivos y ubicaciones que se van a utilizar además de otras indicaciones técnicas y
administrativas. Es obvio que todo esto sólo lo puede realizar si se tiene privilegio de Administrador.

Con el estándar de SQL la instrucción a usar sería Create Database, pero cada SGBD tiene un procedimiento físico para crear las bases de
datos. Crearíamos una base de datos con el nombre que se indique a continuación.

Hemos estado hablando de objetos de la base de datos, ahora veremos a qué nos referimos.

Según los estándares, una base de datos, a nivel lógico, es un conjunto de objetos que nos servirán para gestionar los datos. Estos objetos
están contenidos en esquemas y éstos a su vez suelen estar asociados a un usuario. De ahí que antes dijéramos que cada base de datos
tiene un esquema que está asociado a un usuario.

Para saber más


Sentencia CREATE DATABASE - Manual oficial de Oracle

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 6/24
20/10/22, 11:03 2.B. SQL

3.2. Creación de tablas

Qué necesitamos para poder guardar los datos? Lo primero será definir los objetos donde vamos a agrupar esos datos. Los objetos básicos
con los que trabaja SQL son las tablas, que como ya sabemos es un conjunto de filas y columnas cuya intersección se llama celda. Es ahí
donde se almacenarán los elementos de información, los datos que queremos recoger.

Antes de crear la tabla es conveniente planificar algunos detalles:

Qué nombre le vamos a dar a la tabla.


Qué nombre le vamos a dar a cada una de las columnas.
Qué tipo y tamaño de datos vamos a almacenar en cada columna.
Qué restricciones tenemos sobre los datos.
Alguna otra información adicional que necesitemos.

Y debemos tener en cuenta otras reglas que se deben cumplir para los nombres de las tablas:

No podemos tener nombres de tablas duplicados en un mismo esquema (usuario, según implementación del SGBD).
Deben comenzar por un carácter alfabético. (depende del SGBD)
Su longitud máxima es de 30 caracteres. (depende del SGBD)
Solo se permiten letras del alfabeto inglés, dígitos o el signo de guión bajo. (depende del SGBD)
No puede coincidir con las palabras reservadas de SQL (por ejemplo, no podemos llamar a una tabla WHERE).
No se distingue entre mayúsculas y minúsculas.
En el caso de que el nombre tenga espacios en blanco o caracteres nacionales (permitido sólo en algunos SGBD, entonces se suele
entrecomillar con comillas dobles. En el estándar SQL99 (respetado por Oracle) se pueden utilizar comillas dobles al poner el nombre de
la tabla a fin de hacerla sensible a las mayúsculas (se diferenciará entre "USUARIOS"y "Usuarios").

La sintaxis básica del comando que permite crear una tabla es la siguiente:

donde:

columna1, columna2, ..., columnaN son los nombres de las columna que contendrá la tabla.
Tipo_Dato indica el tipo de dato de cada columna.

Veamos un ejemplo en el que crearemos una tabla llamada USUARIOS con un solo campo denominado NOMBRE de tipo VARCHAR(25).

Recuerda que solo podrás crear tablas si posees los permisos necesarios para ello.

Durante nuestro aprendizaje vamos a tener que crear muchas tablas, para ello necesitaremos manejar los tipos de datos que utiliza Oracle.
En el siguiente enlace tienes una relación de estos tipos y su descripción. Tipos de datos Oracle.

Para saber más


MySQL trabaja con otros tipos de datos. Si quieres conocerlos puedes entrar en este enlace - Tipos de datos en MySQL.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 7/24
20/10/22, 11:03 2.B. SQL

3.3. Restricciones

Hay veces que necesitamos que un dato se incluya en una tabla de manera obligatoria, otras veces necesitaremos definir uno de los campos
como llave primaria o ajena. Todo esto podremos hacerlo cuando definamos la tabla, además de otras opciones.

Una restricción (en lo referente a las columnas) es una condición que una o varias columnas deben cumplir obligatoriamente.

Cada restricción que creemos llevará un nombre, si no se lo ponemos nosotros lo hará Oracle o el SGBD que estemos utilizando. Es
conveniente que le pongamos un nombre que nos ayude a identificarla y que sea único para cada esquema (usuario). Es buena idea incluir
de algún modo el nombre de la tabla, los campos involucrados y el tipo de restricción en el nombre de la misma. La sintaxis en SQL estándar
es la siguiente:

NOTA: lo que va entre "[" y "]" significa que es opcional

Por ejemplo:

Otra opción es definir las columnas de la tabla y después especificar las restricciones, de este modo podrás referir varias columnas en una
única restricción.

En los siguientes apartados veremos cada una de las restricciones, su significado y su uso.

Recomendación
Oracle nos aconseja la siguiente regla a la hora de poner nombre a las restricciones:

Tres letras para el nombre de la tabla.


Carácter de subrayado.
Tres letras con la columna afectada por la restricción.
Carácter de subrayado.
Dos letras con la abreviatura del tipo de restricción. La abreviatura puede ser:
PK = Primary Key.
FK = Foreign Key.
NN = Not Null.
UK = Unique.
CK = Check (validación).

Ejemplo: usu_log_PK

Referencia Oracle sobre la clausula CONSTRAINT: https://docs.oracle.com/cd/B19306_01/server.102/b14200/clauses002.htm

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 8/24
20/10/22, 11:03 2.B. SQL

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 9/24
20/10/22, 11:03 2.B. SQL

3.4. Restricción NOT NULL

Con esta restricción obligaremos a que esa columna tenga un valor o lo que es lo mismo, prohíbe los valores nulos para una columna en
una determinada tabla.

Podremos ponerlo cuando creamos o modificamos el campo añadiendo la palabra NOT NULL después de poner el tipo de dato.

Si en la tabla USUARIOS queremos que el campo "F_Nacimiento" sea obligatorio ponerlo, nos quedaría así:

o bien, de esta otra forma (en la que no ponemos de forma explicita un nombre a la restricción):

Debemos tener cuidado con los valores nulos en las operaciones, ya que por ejemplo 1*NULL es igual a NULL. Por eso la posibilidad de que
un campo pueda ser NULL debe ser gestionada de forma específica en las consultas y definiciones que hagamos.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 10/24
20/10/22, 11:03 2.B. SQL

3.5. Restricción UNIQUE

Habrá ocasiones en la que nos interese que no se puedan repetir valores en la columna, en estos casos utilizaremos la restricción UNIQUE.
Oracle crea un índice automáticamente cuando se habilita esta restricción y lo borra al deshabilitarla.

También para esta restricción tenemos dos posibles formas de ponerla, veámoslo con un ejemplo. Supongamos que el campo Login de
nuestra tabla va a ser único. Lo incluiremos en la tabla que estamos creando. Nos quedaría así:

Veamos otra forma:

También podemos poner esta restricción a varios campos a la vez, por ejemplo, si queremos que Login y correo electrónico sean únicos
podemos ponerlo así:

Si te fijas, detrás del tipo de datos de Correo hay una coma, eso es así porque la restricción es independiente de ese campo y común a
varios. Por eso después de UNIQUE hemos puesto entre paréntesis los nombres de los campos a los que afecta la restricción.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 11/24
20/10/22, 11:03 2.B. SQL

3.6. Restricción PRIMARY KEY

En el modelo relacional las tablas deben tener una clave primaria. Es evidente que cuando creamos la tabla tendremos que indicar a quién
corresponde.

Sólo puede haber una clave primaria por tabla pero ésta puede estar formada por varios campos. Dicha clave podrá ser referenciada como
clave ajena en otras tablas.

La clave primaria hace que los campos que forman sean NOT NULL y que los valores de los campos sean de tipo UNIQUE.

Veamos como quedaría la si la clave fuese el campo Login:

Si la clave la forma un único campo:

O bien poniendo un nombre a la restricción:

Si la clave está formada por más de un campo, por ejemplo Nombre, Apellidos y Fecha de Nacimiento:

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 12/24
20/10/22, 11:03 2.B. SQL

3.7. Restricción Clave ajena. REFERENCES. FOREIGN KEY.

Ya vimos que las claves ajenas, secundarias o foráneas eran campos de una tabla que se relacionaban con la clave primaria (o incluso con la
clave candidata) de otra tabla.

Cuando creemos la tabla tendremos que indicar de alguna forma quién es clave ajena. Lo haremos "haciendo referencia" a la tabla y los
campos de donde procede.

En nuestra tabla vamos a tener una clave ajena procedente de la tabla PARTIDAS que será su Cod_Partida, por tanto tendremos que hacer
referencia a éste:

Si el campo al que hace referencia es clave principal en su tabla no es necesario indicar el nombre del campo:

Si la definición de la clave ajena se pone al final, tendremos que colocar el texto FOREIGN KEY para especificar a qué campo se está refiriendo.

Vamos a verlo en el caso en que la clave ajena estuviera formada por Cod_Partida y Fecha de la partida de la tabla PARTIDAS:

Al relacionar campos necesitamos que el dato del campo que es clave ajena en una tabla (que llamaremos secundaria) previamente haya
sido incluido en su tabla de procedencia donde es clave primaria o candidata. En nuestro ejemplo, cualquier código de partida que
incluyamos en la tabla USUARIO, debería estar previamente en la tabla de la que procede, es decir, en la tabla PARTIDAS. A esto se le llama
Integridad Referencial.

Esto puede crear algunos errores, pues puede ocurrir lo siguiente:

Si hacemos referencia a una tabla que no está creada: Oracle buscará la tabla referenciada y al no encontrarla dará fallo. Esto se
soluciona creando en primer lugar las tablas que no tengan claves ajenas.
Si queremos borrar las tablas tendremos que proceder al contrario, borraremos las tablas que tengan claves ajenas antes.

Tenemos otras soluciones y es añadir tras la cláusula REFERENCE:

ON DELETE CASCADE: te permitirá borrar todos los registros cuya clave ajena sea igual a la clave del registro borrado en la tabla referenciada.
ON DELETE SET NULL: colocará el valor NULL en todas las claves ajenas relacionadas con la borrada en la tabla referenciada.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 13/24
20/10/22, 11:03 2.B. SQL

3.8. Restricciones DEFAULT y CHECK

A veces es muy tedioso insertar siempre lo mismo en un campo. Imagínate que casi todos los jugadores fuesen de España y tenemos un
campo País. ¿No sería cómodo asignarle un valor por defecto? Eso es lo que hace la restricción DEFAULT.

En nuestro ejemplo vamos a añadir a la tabla USUARIOS el campo País y le daremos por defecto el valor "España".

En las especificaciones de DEFAULT vamos a poder añadir distintas expresiones: constantes, funciones SQL y variables.

Si queremos incluir en un campo la fecha actual, independientemente del día en el que estemos, podremos utilizar la función SYSDATE como
valor por defecto:

También vamos a necesitar que se compruebe que los valores que se introducen son adecuados para ese campo. Para ello
utilizaremos CHECK.

Esta restricción comprueba que se cumpla una condición determinada al rellenar una columna. Dicha condición se puede construir con
columnas de esa misma tabla.

Si en la tabla USUARIOS tenemos el campo Crédito y éste sólo puede estar entre 0 y 2000, lo especificaríamos así:

Para saber más


Si queremos obtener una descripción de una tabla, sinonimo, paquete o función, podemos utilizar el comando DESCRIBE

Oracle Documentación Oficial - Comando DESCRIBE

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 14/24
20/10/22, 11:03 2.B. SQL

3.9. Eliminación de tablas - DROP TABLE

Cuando una tabla ya no es útil y no la necesitamos es mejor borrarla, de este modo no ocupará espacio y podremos utilizar su nombre en
otra ocasión.

Para eliminar una tabla utilizaremos el comando DROP TABLE.

Esta instrucción borrará la tabla de la base de datos incluido sus datos (filas). También se borrará toda la información que existiera de esa
tabla en el Diccionario de Datos.

La opción CASCADE CONSTRAINTS se puede incluir para los casos en que alguna de las columnas sea clave ajena en otra tabla secundaria, lo que
impediría su borrado. Al colocar esta opción las restricciones donde es clave ajena se borrarán antes y a continuación se eliminará la tabla
en cuestión.

Vamos a eliminar la tabla con la que hemos estado trabajando:

Ten cuidado al utilizar este comando, el borrado de una tabla es irreversible y no hay una petición de confirmación antes de ejecutarse.

Al borrar una tabla:

Desaparecen todos sus datos


Cualquier vista asociada a esa tabla seguirá existiendo pero ya no funcionará.

Oracle dispone de la orden TRUNCATE TABLE que te permitirá eliminar los datos (filas) de una tabla sin eliminar su estructura.

Y recuerda que solo podrás borrar aquellas tablas sobre las que tengas permiso de borrado.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 15/24
20/10/22, 11:03 2.B. SQL

3.10. Modificación de tablas - ALTER TABLE

Es posible que después de crear una tabla nos demos cuenta que se nos ha olvidado añadir algún campo o restricción, quizás alguna de las
restricciones que añadimos ya no es necesaria o tal vez queramos cambiar el nombre de alguno de los campos. ¿Es posible esto? Ahora
veremos que sí y en casi todos los casos utilizaremos el comando ALTER TABLE.

Si queremos cambiar el nombre de una tabla:

Si queremos añadir columnas a una tabla: las columnas se añadirán al final de la tabla.

Si queremos eliminar columnas de una tabla: se eliminará la columna indicada sin poder deshacer esta acción. Además de la definición
de la columna, se eliminarán todos los datos que contuviera. No se puede eliminar una columna si es la única que forma la tabla, para
ello tendremos que borrar la tabla directamente.

Si queremos modificar columnas de una tabla: podemos modificar el tipo de datos y las propiedades de una columna. Todos los cambios
son posibles si la tabla no contiene datos. En general, si la tabla no está vacía podremos aumentar la longitud de una columna, aumentar
o disminuir en número de posiciones decimales en un tipo NUMBER, reducir la anchura siempre que los datos no ocupen todo el espacio
reservado para ellos.

Si queremos renombrar columnas de una tabla:

Ejemplo
Tenemos la siguiente tabla creada:

Nos gustaría incluir una nueva columna llamada User que será tipo texto y clave primaria:

Nos damos cuenta que ese campo se llamaba Login y no User, vamos a cambiarlo:

Ejercicio resuelto

Tenemos creada la siguiente tabla:

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 16/24
20/10/22, 11:03 2.B. SQL

Ahora queremos poner una restricción a sueldo para que tome valores entre 1000 y 1200, ¿cómo lo harías?

ALTER TABLE EMPLEADOS MODIFY (Sueldo NUMBER(2) CHECK (Sueldo BETWEEN 1000 AND 1200));

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 17/24
20/10/22, 11:03 2.B. SQL

3.11. Modificación de tablas - ALTER TABLE sobre restricciones

Utilizando el comando ALTER TABLE, podemos modificar las restricciones o bien eliminarlas:

Si queremos borrar restricciones:


ALTER TABLA NombreTabla DROP CONSTRAINT NombreRestriccion;

Si queremos modificar el nombre de las restricciones:


ALTER TABLE NombreTabla RENAME CONSTRAINT NombreViejo TO NombreNuevo;

Si queremos activar o desactivar restricciones:


A veces es conveniente desactivar temporalmente una restricción para hacer pruebas o porque necesitemos saltarnos esa regla. Para ello
usaremos esta sintaxis:

ALTER TABLE NombreTabla DISABLE CONSTRAINT NombreRestriccion [CASCADE];

La opción CASCADE desactiva las restricciones que dependan de ésta.

Para activar de nuevo la restricción:

ALTER TABLE NombreTabla ENABLE CONSTRAINT NombreRestriccion [CASCADE];

Puede ocurrir que no hayamos puesto nombre a las restricciones o bien que lo hiciéramos pero no lo recordemos. Sería interesante que se
pudiera consultar en algún lado.

Nombre de todas las restricciones.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 18/24
20/10/22, 11:03 2.B. SQL

3.12. Creación y eliminación de Indices - CREATE INDEX y DROP INDEX

Sabemos que crear índices ayuda a la localización más rápida de la información contenida en las tablas. Ahora aprenderemos a crearlos y
eliminarlos:

No es aconsejable que crees indices sobre campos de tablas pequeñas o que se actualicen con mucha frecuencia. Tampoco es conveniente
si esos campos no se usan en consultas de manera frecuente o en expresiones.

El diseño de indices es un tema bastante complejo para los Administradores de Bases de Datos, ya que una mala elección ocasiona
ineficiencia y tiempos de espera elevados. Un uso excesivo de ellos puede dejar a la Base de Datos colgada simplemente con insertar alguna
fila.

Para eliminar un índice es suficiente con poner la instrucción:

La mayoría de los índices se crean de manera implícita cuando ponemos las restricciones PRIMARY KEY, FOREIGN KEY o UNIQUE.

Ejercicio resuelto
Tenemos creada la siguiente tabla:

Crea un índice con el campo Apellidos, luego elimínalo.

La solución sería:

CREATE INDEX miIndice ON EMPLEADOS (Apellidos);

DROP INDEX miIndice;

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 19/24
20/10/22, 11:03 2.B. SQL

4. Lenguaje de control de datos (DCL)

Ya hemos visto que necesitamos una cuenta de usuario para acceder a los datos de una base de datos. Las claves de acceso se establecen
cuando se crea el usuario y pueden ser modificados por el Administrador o por el propietario de dicha clave. La Base de Datos
almacena encriptadas las claves en una tabla del diccionario llamada DBA_USERS.

¿Cómo se crean los usuarios? La sintaxis es:

NOTA: lo que va entre "[" y "]" significa que es opcional

Donde:

CREATE USER: crea un nombre de usuario que será identificado por el sistema.
IDENTIFIED BY: permite dar una clave de acceso al usuario creado.
DEFAULT TABLESPACE: asigna a un usuario el Tablespace por defecto para almacena los objetos que cree. Si no se asigna ninguna,
será SYSTEM.
TEMPORARY TABLESPACE: especifica el nombre del Tablespace para trabajos temporales. Por defecto será SYSTEM.
QUOTA: asigna un espacio en Megabytes o Kilobytes en el Tablespace asignado. Si no se especifica el usuario no tendrá espacio y no podrá
crear objetos.
PROFILE: asigna un perfil al usuario. Si no se especifica se asigna el perfil por defecto.

Recuerda que para crear usuarios debes tener una cuenta con privilegios de Administrador.

Para ver todos los usuarios creados utilizamos las vistas ALL_USERS y DBA_USERS. Y para ver en mi sesión los usuarios que existen
pondría: DESC SYS.ALL_USERS;

Practiquemos un poco con este comando. Creemos una cuenta de usuario limitado, que no tenga derecho ni a guardar datos ni a crear
objetos, más tarde le daremos permisos:

CREATE USER UsuarioLimitado IDENTIFIED BY passworddemiusuariolimitado ;

Podemos modificar usuarios mediante el comando ALTER USER, cuya sintaxis es la siguiente:

Un usuario sin privilegios de Administrador únicamente podrá cambiar su clave de acceso.

Para eliminar o borrar un usuario utilizamos el comando DROP USER con la siguiente sintaxis:

La opción CASCADE borra todos los objetos del usuario antes de borrarlo. Sin esta opción no nos dejaría eliminar al usuario si éste tuviera
tablas creadas.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 20/24
20/10/22, 11:03 2.B. SQL

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 21/24
20/10/22, 11:03 2.B. SQL

4.1. Permisos - GRANT

Ningún usuario puede llevar a cabo una operación si antes no se le ha concedido el permiso para ello. En el apartado anterior hemos creado
un usuario para iniciar sesión, pero si con él intentáramos crear una tabla veríamos que no tenemos permisos suficientes para ello.

Para poder acceder a los objetos de una base de datos necesitas tener privilegios (permisos). Éstos se pueden agrupar formando roles o
perfiles, lo que simplificará la administración. Los roles pueden activarse, desactivarse o protegerse con una clave. Mediante los roles
podemos gestionar los comandos que pueden utilizar los usuarios. Un permiso se puede asignar a un usuario o a un rol.

Un privilegio o permiso se especifica con el comando GRANT (conceder).

Si se dan privilegios sobre los objetos:

donde:

ON especifica el objeto sobre el que se conceden los privilegios.


TO señala a los usuarios o roles a los que se conceden privilegios.
ALL concede todos los privilegios sobre el objeto especificado.
[WITH GRANT OPTION] permite que el receptor del privilegio se lo asigne a otros.
PUBLIC hace que un privilegio esté disponible para todos los usuarios.

En el siguiente ejemplo Juan ha accedido a la base de datos y ejecuta los siguientes comandos:

GRANT INSERT TO Usuarios TO Ana; (permitirá a Ana insertar datos en la tabla Usuarios)
GRANT ALL ON Partidas TO Ana; (Juan concede todos los privilegios sobre la tabla Partidas a Ana)

Los privilegios de sistema son los que dan derecho a ejecutar comandos SQL o acciones sobre objetos de dicho tipo específico. Existen gran
cantidad de privilegios distintos.

La sintaxis para dar este tipo de privilegios la tienes aquí:

Donde

TO señala a los usuarios o roles a los que se conceden privilegios.


WITH ADMIN OPTION es una opción que permite al receptor de esos privilegios que pueda conceder esos mismos privilegios a otros usuarios
o roles.
PUBLIC hace que un privilegio esté disponible para todos los usuarios.

Veamos algunos ejemplos:

GRANT CONNECT TO Ana;

Concede a Ana el rol de CONNECT con todos los privilegios que éste tiene asociados.

GRANT DROP USER TO Ana WITH ADMIN OPTION;

Concede a Ana el privilegio de borrar usuarios y que ésta puede conceder el mismo privilegio de borrar usuarios a otros.

Para saber más


Si quieres conocer más sobre permisos y objetos sobre los que se conceden privilegios, visita este enlace:

Oracle - Gestión de privilegios y recursos.

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 22/24
20/10/22, 11:03 2.B. SQL

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 23/24
20/10/22, 11:03 2.B. SQL

4.2. Permisos - REVOKE

Hasta ahora hemos aprendido a conceder permisos o privilegios. Será importante aprender a retirarlos:

Con el comando REVOKE se retiran los privilegios:

Sobre objetos:

Del sistema o roles a usuarios:

Juan va a quitar el permiso de seleccionar y de actualizar sobre la tabla Usuarios a Ana:

REVOKE SELECT, UPDATE ON Usuarios FROM Ana;

y va a quitarle el permiso de eliminar usuarios:

REVOKE DROP USER FROM Ana;

EducaMadrid - Vicepresidencia, Consejería de Educación y Universidades - Ayuda

https://aulavirtual3.educa.madrid.org/ies.alonsodeavellan.alcala/mod/book/tool/print/index.php?id=51171 24/24

También podría gustarte