Laboratorio #03
Laboratorio #03
Laboratorio #03
Laboratorio Nº 03
Tema: Creación de tablas, campos, restricciones, tipos de datos, alteración y
eliminación de tablas y base de datos
I. Objetivos
Lenguaje SQL
SQL (Structured Query Language), Lenguaje Estructurado de Consulta es el lenguaje utilizado para definir, controlar y
acceder a los datos almacenados en una base de datos relacional.
Como ejemplos de sistemas gestores de bases de datos que utilizan SQL podemos citar DB2, SQL Server, Oracle, MySql,
Sybase, PostgreSQL o Access.
El SQL es un lenguaje universal que se emplea en cualquier sistema gestor de bases de datos relacional. Tiene un estándar
definido, a partir del cual cada sistema gestor ha desarrollado su versión propia.
Se puede ejecutar directamente en modo interactivo, pero también se suele emplear embebido en programas escritos en
lenguajes de programación convencionales. En estos programas se mezclan las instrucciones del propio lenguaje
(denominado anfitrión) con llamadas a procedimientos de acceso a la base de datos que utilizan el SQL como lenguaje de
acceso. Como por ejemplo en Visual Basic, Java, C#, PHP .NET, etc.
El DDL, es la parte del SQL dedicada a la definición de la base de datos, consta de sentencias para definir la estructura de
la base de datos, permiten crear la base de datos, crear, modificar o eliminar la estructura de las tablas, crear índices,
definir reglas de validación de datos, relaciones entre las tablas, etc. Permite definir gran parte del nivel interno de la base
de datos. Por este motivo estas sentencias serán utilizadas normalmente por el administrador de la base de datos.
El DCL (Data Control Language) se compone de instrucciones que permiten:
Ejercer un control sobre los datos tal como la asignación de privilegios de acceso a los datos (GRANT/REVOKE).
El DML se compone de las instrucciones para el manejo de los datos, para insertar nuevos datos, modificar datos
existentes, para eliminar datos y la más utilizada, para recuperar datos de la base de datos. Veremos que una sola
instrucción de recuperación de datos es tan potente que permite recuperar datos de varias tablas a la vez, realizar cálculos
sobre estos datos y obtener resúmenes.
El DML interactúa con el nivel externo de la base de datos por lo que sus instrucciones son muy parecidas, por no decir
casi idénticas, de un sistema a otro, el usuario sólo indica lo que quiere recuperar no cómo se tiene que recuperar, no
influye el cómo están almacenados los datos.
Una transacción se puede definir como un conjunto de acciones que se tienen que realizar todas o ninguna para preservar
la integridad de la base de datos.
Por ejemplo supongamos que tenemos una base de datos para las reservas de avión. Cuando un usuario pide reservar un
lugar en un determinado vuelo, el sistema tiene que comprobar que queden lugares libres, si quedan lugares reservará el
que quiera el usuario generando un nuevo boleto y marcando el lugar como ocupado. Aquí tenemos un proceso que
consta de dos operaciones de actualización de la base de datos (crear una nueva fila en la tabla de boletos y actualizar el
lugar reservado en el vuelo, poniéndolo como ocupado) estas dos operaciones se tienen que ejecutar o todas o ninguna,
si después de crear el boleto no se actualiza el lugar porque se cae el sistema, por ejemplo, la base de datos quedaría en
un estado inconsistente ya que el lugar quedaría como libre cuando realmente habría un boleto emitido para este lugar.
En este caso el sistema tiene el mecanismo de transacciones para evitar este error. Las operaciones se incluyen las dos en
una misma transacción y así el sistema sabe que las tiene que ejecutar las dos, si por lo que sea no se pueden ejecutar las
dos, se encarga de deshacer los cambios que se hubiesen producido para no ejecutar ninguna.
Las instrucciones que gestionan las autorizaciones serán utilizadas normalmente por el administrador mientras que las
otras, referentes a proceso de transacciones serán utilizadas también por los programadores.
Transact-SQL es fundamental para trabajar con SQL Server. Todas las aplicaciones que se comunican con SQL Server lo
hacen enviando instrucciones Transact-SQL al servidor, independientemente de la interfaz de usuario de la aplicación.
A continuación se proporciona una lista de las aplicaciones que pueden generar Transact-SQL:
Aplicaciones generales de productividad en oficinas.
Aplicaciones que utilizan una interfaz gráfica de usuario (GUI) para permitir al usuario seleccionar las tablas y
columnas cuyos datos desea ver.
Aplicaciones que utilizan instrucciones del lenguaje general para determinar los datos que el usuario desea ver.
Aplicaciones de la línea de negocios que almacenan sus datos en bases de datos SQL Server. Estas aplicaciones
pueden incluir aplicaciones de otros proveedores o escritas internamente.
Scripts Transact-SQL que se ejecutan con herramientas tales como sqlcmd.
Aplicaciones creadas con sistemas de desarrollo tales como Microsoft Visual C++, Microsoft Visual Basic o
Microsoft Visual J++, y que usan API de base de datos tales como ADO, OLE DB y ODBC.
Páginas web que extraen datos de bases de datos SQL Server.
Sistemas de bases de datos distribuidos desde los que se replican datos SQL Server en varias bases de datos o se
ejecutan consultas distribuidas.
Almacenamientos de datos en los que los datos se extraen de los sistemas de procesamiento de transacciones en
línea (OLTP) y se resumen para el análisis dirigido a la toma de decisiones.
Instrucción CREATE
Vamos a examinar la estructura completa de la sentencia CREATE empezando con la más general. Descubrirá que
las instrucciones CREATE empiezan de la misma forma y después dan paso a sus especificaciones. La primera parte de
CREATE será siempre igual:
CREATE <tipo de objeto> <nombre del objeto>
A esta parte le seguirán los detalles, que variarán según la naturaleza del objeto que estemos creando. A continuación
se presenta un listado de sintaxis más completa de CREATE:
CREATE DATABASE
Crea una nueva base de datos y los archivos que se utilizan para almacenar la base de datos
Sintaxis:
CREATE DATABASE <nombre de base de datos>
[ON [PRIMARY]
([NAME = <nombre lógico del archivo>,]
FILENAME = <’nombre del archivo’>
[, SIZE = <tamaño en Kilobytes, megabytes, gigabytes, o terabytes>]
[, MAXSIZE = <tamaño en Kilobytes, megabytes, gigabytes, o terabytes>]
[, FILEGROWTH = <tamaño en Kilobytes, megabytes, gigabytes, o terabytes| porcentaje>] ) ]
[LOG ON
([NAME = <nombre lógico del archivo>,]
FILENAME = <’nombre del archivo’>
[, SIZE = <tamaño en Kilobytes, megabytes, gigabytes, o terabytes>]
[, MAXSIZE = <tamaño en Kilobytes, megabytes, gigabytes, o terabytes>]
[, FILEGROWTH = <tamaño en Kilobytes, megabytes, gigabytes, o terabytes| porcentaje>] ) ]
[ COLLATE <nombre de intercalación> ]
Tenga en cuenta que algunas de las opciones anteriores son mutuamente excluyentes (por ejemplo, si está creando
para anexar, la mayoría de las opciones que no sean ubicaciones de archivo no serán válidas). En esta sintaxis hay
mucho que explicar, por lo que vamos a desglosarla en sus elementos.
ON:
ON se utiliza en dos sitios para definir la ubicación del archivo donde se almacenan los datos (Archivo .MDF) y
para definir la misma información para el lugar donde se guarda el registro (Log de transacciones, archivo .LDF).
Advertirá aquí la inclusión de la palabra clave PRIMARY, que indica que lo que sigue es un grupo de archivos
primarios (o principales) en el que se guardan físicamente los datos. También podemos guardar datos en los
denominados grupos de archivos secundarios.
NAME:
Éste es el nombre del archivo que estamos definiendo, pero sólo es un nombre lógico, es decir, el nombre que
va a utilizar SQL Server internamente para hacer referencia a dicho archivo.
FILENAME:
Éste es el nombre físico del disco del archivo del sistema operativo real en el que se van a guardar los datos y el
registro (Log de transacciones). El valor predeterminado dependerá de si estamos tratando con la propia base de
datos o con el Log de transacciones. De forma predeterminada, el archivo se ubicará en el siguiente subdirectorio
\ Data dentro del directorio C:\ Archivos de programa \ Microsoft
SQLServer \ MSSQL.1 \ MSSQL (o el directorio que ha ya establecido como principal para SQL Server en la instalación). Si
estuviésemos utilizando el archivo de base de datos físico, se denominaría igual que nuestra base de datos con una
extensión .mdf y si estuviésemos utilizando el registro, tendría el mismo nombre que el archivo de base de datos,
pero con un sufijo _log y una extensión .ldf.
SIZE:
Aquí no hay ningún misterio: es el tamaño de la base de datos. De forma predeterminada, el tamaño se proporciona
en megabytes, pero también podemos hacer que se proporcione en kilobytes utilizando KB en lugar de MB tras
el valor numérico del tamaño; también podemos usar un tamaño mucho mayor con GB (gigabytes) o incluso TB
(terabytes). Tenga en cuenta que este valor debe ser, al menos, tan alto como el de la base de datos model y debe
ser un número entero (sin decimales); en caso contrario recibiremos un error. Si no suministramos un valor para SIZE, la
base de datos tendrá inicialmente el mismo tamaño que el de la base de datos model.
MAXSIZE:
Este parámetro es una pequeña variante del parámetro SIZE. SQL Server tiene un mecanismo que permite a
nuestra base de datos asignar automáticamente un espacio en disco adicional (para crecer) cuando sea necesario.
MAXSIZE es el tamaño máximo al que puede crecer la base de datos. Una vez más, de forma predeterminada se
proporciona en megabytes, como SIZE, podemos utilizar KB, GB o TB para emplear cantidades de incremento diferentes.
La pequeña variante es que no existe un valor predeterminado firme.
Si nuestra base de datos (el archivo .mdf) llega al valor establecido en el parámetro MAXSIZE, nuestros usuarios
empezarán a recibir errores indicando que sus inserciones no se pueden ejecutar. Si nuestro registro (Log de
transacciones .ldf) llega a su tamaño máximo, no podremos ejecutar ninguna actividad de inicio de sesión en la
base de datos.
FILEGROWTH:
Mientras SIZE establece el tamaño inicial de la base de datos y MAXSIZE determina exactamente el tamaño máximo
que puede llegar a tener el archivo de la base de datos, FILEGROWTH determina básicamente el incremento del
crecimiento con que se puede llegar a dicho máximo. Para ello, proporcionamos un valor indicando por cuantos
bytes (en KB, MB, GB, o TB) a la vez deseamos aumentar el archivo. Por ejemplo, si establecemos un archivo de
base de datos para que cuando llegue a 1GB incremente en un valor FILEGROWTH de un 20%, la primera vez que se
expanda, aumentará hasta a 1.2GB, la segunda vez hasta 1.44GB y así sucesivamente.
LOG ON:
La opción LOG ON nos permite establecer que deseamos que nuestro registro (Log de transacciones) se dirija a un
conjunto específico de archivos y dónde se deben ubicar exactamente dichos archivos. Si no proporcionamos esta
opción, SQL Server creará el registro (Log de transacciones) en un solo archivo y lo predeterminará para que tenga
un tamaño igual al 25% del tamaño del archivo de datos.
COLLATE:
Esta opción tiene que ver con el problema de la ordenación, las mayúsculas y minúsculas y los acentos. Al instalar
su SQL Server, habrá decidido sobre cuál es la intercalación predeterminada, pero puede sobrescribir este parámetro a
nivel de base de datos y a nivel de columna.
Recomendaciones
Es muy recomendable que guarde sus archivos de registro ( .ldf) en una unidad de disco diferente a la de sus
archivos de datos principales (.mdf). Al hacerlo, evitará que los archivos de datos principal y de registro compitan
por la E/S del disco además de proporcionar una seguridad adicional si falla una unidad.
CREATE TABLE
Crea una nueva tabla en SQL Server
Sintaxis
CREATE TABLE nombre_tabla
(
nombre_campo_1 tipo_1
nombre_campo_2 tipo_2
nombre_campo_n tipo_n
Key(campo_x,...)
)
RESTRICCIONES EN UNA TABLA
Limitar el tipo de dato que puede ingresarse en una tabla. Dichas restricciones pueden especificarse cuando la tabla se
crea por primera vez a través de la instrucción CREATE TABLE, o luego de crear la tabla a través de la instrucción ALTER
TABLE.
NOT NULL
En forma predeterminada, una columna puede ser NULL. Si no desea permitir un valor NULL en una columna, deberá
colocar una restricción en esta columna especificando que NULL no es ahora un valor permitido.
Con la instrucción NOT NULL en las columnas “Codigo” y “Apellido”, estas no aceptan valores nulos (vacíos), mientras que
el campo “Nombre” si puede contener valores nulos.
UNIQUE
La restricción UNIQUE asegura que todos los valores en una columna sean distintos.
La columna “Codigo” no puede incluir valores duplicados, dicha restricción no se aplica para columnas “Apellido” y
“Nombre”.
CHECK
La restricción CHECK asegura que todos los valores en una columna cumplan ciertas condiciones.
Modifica una definición de tabla al alterar, agregar o quitar columnas y restricciones, reasignar particiones, o deshabilitar
o habilitar restricciones y desencadenadores.
Esta sentencia nos permite agregar el campo estado con un tipo de dato VARCHAR de 8 caracteres a la tabla contactos
Eliminar un campo
Con la instrucción ALTER TABLE se pueden agregar las diferentes tipos de restricciones mencionadas anteriormente, por
ejemplo:
Restricción Check
Restricción Default
IV. Procedimiento
1. Luego de estar dentro de Management Studio, agregar la opción para editar una nueva consulta, hacer clic en el
botón New Query (1), para que se habilite un espacio en blanco(2) en donde se pueden ingresar o digitar las
sentencias o consultas SQL
2. Crear en la unidad C una carpeta con el nombre Guia2_SuCarnet, para que pueda verificar la creación de los
archivos .mdf y .ldf
3. Crear la base de datos BasedeDatos_SuCarnet, en la área de edición de consultas SQL, digitar la siguiente consulta:
Nota importante: Recuerde que debe sustituir la palabra SuCarnet con su número de carnet
4. Ahora se tiene que ejecutar la consulta, tiene que hacer clic en la opción Execute (Ejecutar)
7. Para verificar si se creó la base de datos, actualice (refresh) la carpeta Databases (Base de datos) y observará que
se creó la nueva base de datos
Verifique las propiedades (properties) de la base de datos si son las que se colocaron cuando se creó la base de datos:
Tablas Campos
Autor CodigoAutor
Nombre (PrimerNombre y Primer Apellido)
FechaNacimiento
Nacionalidad
Libro CodigoLibro
Titulo
ISBN
AñoEdicion
CodigoEditorial
Editorial CodigoEditorial
Nombre
País
Detalle_AutorLibro CodigoAutor
CodigoLibro
Fecha
1. Después de la consulta que utilizó para crear la base de datos, digite la siguiente consulta SQL:
2. Seleccione desde el comando USE hasta el cierre del paréntesis y
ejecute la consulta, si aparece el siguiente mensaje, se creó
correctamente la tabla
Un punto muy importante es que con la instrucción USE, hemos seleccionado la base de datos en la cual deseamos
trabajar
Nota: La instrucción USE se usará las veces que nos queremos cambiar de base de datos, sino solo se utiliza una vez
3. Actualice (Refresh) su Base de datos y abra la carpeta Tables y deberá observar la tabla Autor creada
4. Ahora se tiene que crear la tabla Libro, digite después de la última instrucción SQL la siguiente consulta:
5. Seleccione la consulta que está creando la tabla Libro y ejecútela, actualice la base de datos y deberá observar la
tabla agregada.
9. Ejecutar la consulta y actualice la base de datos, al final deberá tener en la base de datos BasedeDatos_SuCarnet,
las cuatro tablas creadas:
Ejercicio 3. Estableciendo restricciones: Default, Check y Unique
Restricción Default
1. Se creará una restricción Default en el campo Fecha para la tabla Detalle_AutorLibro, en la cual si el usuario no
digita nada, para esta fecha que se introduzca la fecha del sistema utilizando la función getdate()
Restricción Check
4. La cual agrega una restricción Check , para el campo AñoEdicion de la tabla Libro, los datos que se introduzcan
para este campo deben ser mayores al año 2010
6. La consulta que se digitará a continuación, crea una restricción Unique para el campo ISBN de la tabla Libro, el
cual se puede tomar ese campo como dato único, pero no es una clave principal ya que ese campo no se utiliza
para crear relaciones entre tablas
El comando DROP se utiliza para quitar objetos existentes como base de datos, tablas, usuarios, vistas, triggers,
procedimiento almacenado etc.
USE GUIA2_Sucarnet
GO
GO es un signo de finalización de un lote de sentencias. No es una sentencia, es un comando. El lote de sentencias está
compuesto por todas las sentencias antes de GO o todas las sentencias entre dos GO
3. Verifique que creo la base de datos y la tabla dentro de la base de datos Guia2_Sucarnet, como también que ya
está haciendo uso de ella
--Eliminando la tabla
USE Master
GO
DROP DATABASE Guia2_Sucarnet
9. Actualice la carpeta Databases y ya no debe estar la base de datos que creo en este ejercicio
1. Ahora vamos a guardar las consultas en un archivo que tiene la extensión .sql esto para en cualquier momento
haga uso de las consultas
2. Hacer clic en el menú File y seleccione la opción Save SQLQuery1.sql As… busque la carpeta que creo al inicio del
ejercicio 1
4. Verifique que creo el archivo .sql, ese es el archivo que le enviará al docente.
V. Ejercicio complementario
En una nueva área de edición de consultas crear la siguiente base de datos en SQL Server:
Tablas:
Tablas Campos
Hotel CodigoHotel
Nombre
Direccion
SitioWeb
Reservacion CodigoReserva
CodigoHotel
CodigoHuesped
CodigoHabitacion
FechaInicio
FechaFin
Habitacion CodigoHabitacion
CodigoHotel
Tipo
Precio
Huesped CodigoHuesped
Nombre
Email
Dirección
Telefono
1. La base de datos
2. Las tablas con sus correspondientes campos y propiedades
3. Crear las siguientes restricciones en los campos:
a. Unique:
i. Tabla Hotel (Nombre, SitioWeb)
ii. Tabla Huesped (E-mail)
b. Check:
i. Tabla Habitacion (Precio mayor que 25, Tipo: Doble, individual)
ii. Tabla Reservacion (Fecha fin tiene que ser mayor a la fecha de inicio)
c. Default:
i. Tabla Reservacion (Fecha inicio por defecto puede ser la fecha actual del sistema)