Ricardo Pérez López
IES Doñana, curso 2017-18
Una base de datos contiene uno o más esquemas, los cuales a su vez contienen tablas y otros objetos.
Dos objetos pueden tener el mismo nombre siempre que se encuentren en esquemas diferentes.
Puede haber dos tablas distintas que se llamen igual (por ejemplo, mitabla) siempre y cuando se encuentren almacenadas en esquemas diferentes.
Es lo mismo que ocurre en un sistema de archivos:
Las tablas (y demás objetos de bases de datos) son como los archivos.
Los esquemas son como las carpetas, ya que son los que contienen los objetos de bases de datos de la misma forma que una carpeta contiene archivos.
La diferencia es que los esquemas no pueden anidarse (no puede haber esquemas dentro de esquemas).

Un usuario puede acceder a los objetos de un determinado esquema si dispone de los privilegios suficientes.
esquema.tabla
Esto funciona en cualquier sitio donde se pueda escribir el nombre de una tabla (quien dice tabla, dice cualquier otro objeto de base de datos). Por ejemplo:
Hasta ahora hemos estado utilizando tablas sin especificar el nombre de ningún esquema.
Cuando usamos el nombre de una tabla sin indicar el esquema, se dice que estamos usando su nombre no cualificado.
El sistema determina a qué tabla nos estamos refiriendo siguiendo una ruta de búsqueda, que no es más que una lista de esquemas en los que mirar.
Se va mirando en dicha ruta esquema por esquema hasta encontrar una tabla con el nombre que se está buscando.
Si no se encuentra ninguna en toda la ruta se emitirá un mensaje de error, incluso si hay tablas con ese nombre en otros esquemas de la base de datos.
El primer esquema que aparece en la ruta de búsqueda se denomina el esquema actual.
Además de ser el primer esquema en el que se busca, también es el esquema en el que se crearán las nuevas tablas si no se especifica ningún esquema durante su creación.
Para mostrar la ruta de búsqueda actual, se usa el comando:
Por defecto vale:
search_path
-----------------
"$user", public
El primer elemento representa el esquema que tenga el mismo nombre que el usuario actual. Si no existe tal esquema, se ignora.
El segundo elemento se refiere al esquema público, que trataremos en breve.
search_path='"$user", public', y siendo manolo el usuario actual, ¿qué ocurre cuando manolo introduce la siguiente orden?emple primero en el esquema manolo, y si no lo encuentra, lo busca en el esquema público (public). Si tampoco la encuentra ahí, emitirá un error.Se representa como public.
Es el esquema en el que están actualmente todas las tablas de nuestra base de datos.
Se puede decir que es el esquema “por defecto”, mientras no se usen otros esquemas.
copiar_tabla()Un usuario sólo puede modificar los datos de una tabla si:
Es su propietario, o
Su propietario le ha concedido los privilegios adecuados.
Como no tenéis privilegios para poder modificar las tablas, tenéis que crear vuestras propias tablas en vuestro propio esquema.
A partir de ahora, cada uno de vosotros cuenta con un esquema que se llama igual que vuestro nombre de usuario, y cada usuario sólo puede entrar en su esquema (no en el de los demás).
Lo que haréis será crear copias de las tablas del esquema public en vuestros propios esquemas, usando la función copiar_tabla().
public.DELETE FROMPregunta: ¿Da lo mismo poner emple que ricardo.emple?
El WHERE puede ser muy complicado:
Incluso con correlacionadas:
Un DELETE sin WHERE:
Es lo mismo que poner:
¡Borra todas las filas de la tabla!
<iframe width="620" height="315"
src="https://www.youtube.com/embed/OhlVBpEnjig">
</iframe>
INSERT INTOCon todas las columnas:
Con algunas columnas:
Sin columnas:
DEFAULTEs lo mismo que:
DEFAULT / NULL¿Es lo mismo DEFAULT que NULL?
INSERT INTO depart (dept_no, dnombre, loc)
VALUES (50, 'INFORMÁTICA', 'SANLÚCAR'),
(60, 'LABORATORIO', 'JEREZ');Con la coma delante de la línea siguiente:
DEFAULT VALUESEs lo mismo que:
INSERT ... SELECTUPDATE¿Importa el orden de las asignaciones?
No. La orden anterior se podría haber escrito así:
Intercambiar el valor de dos columnas:
Un UPDATE sin WHERE:
Es lo mismo que poner:
¡Modifica todas las filas de la tabla!