You are on page 1of 41

Introducción a TSQL

Unidad 7

Autor
Isabel Ponce
Unidad 7

Objetivos
•Nombres de Tablas
•Nombres de Columnas
•Tipos de datos
•Manejo de Secuencias
(AUTO_INCREMENT)
•Creación de Tablas
•Modificación de Tablas
•Borrado de Tablas
•Creación de Bases de Datos
•Archivos en lote (Script)
DDL

• El SQL DDL es el Data Definition


Language (Lenguaje de Definición de
Datos) de SQL, también conocido
como Schema Definition Language
de acuerdo con ANSI.
• Este sublenguaje proporciona órdenes
para definir la estructura y organización
de los datos almacenados y sus
relaciones, así como la integridad.
• Permite:
– Especificar diversos objetos (tablas, vistas,
procedimientos almacenados,
disparadores, etc.)
– Eliminar los objetos existentes.
– Modificar los objetos existentes.
• Algunas de las instrucciones más
comunes usadas en instrucciones DDL
son las diferentes formas de los
comandos CREATE, ALTER y DROP.
Construcción de la BD

• Definir el esquema de la base de datos


es el primer paso para la creación de la
base de datos.
• Para hacerlo, se toma como base el
diseño lógico previamente definido y se
transforma en objetos específicos que
permiten almacenar los datos
cubriendo las restricciones necesarias
para que los datos sean consistentes.
• Los objetos de la base de datos,
incluyendo nombres de tablas y
atributos, deben obedecer ciertas
reglas o convenciones que pueden
variar de un RDBMS a otro.
• Seguir las convenciones de nombres
de un RDBMS particular puede causar
errores en otro. Sin embargo, los
usuarios evitarán errores si siguen
algunos lineamientos.
Nombres de Objetos de la BD

• Los nombres peden ser de 1 a 30


caracteres de longitud, a excepción
de los nombres de bases de datos
que pueden estar limitados a 8
caracteres, como en el caso de
Oracle.
• Los nombres deben de empezar con
una letra (minúscula o mayúscula); el
resto de los caracteres pueden ser
combinados con letras mayúsculas o
minúsculas, dígitos o el carácter
guión bajo (_).
• No usar espacios en blanco.
• Los nombres de las tablas no
pueden ser duplicados dentro de la
misma BD.
• Los nombres de los atributos no
pueden duplicarse dentro de la
misma tabla.
Nombres de Objetos de la BD

• Los nombres de los objetos no


deben ser palabras reservadas
(comandos SQL).
• Aunque no es requisito, los nombres
de los objetos deben tener un
nombre que indique su contenido o
función.
• Abreviar lo mínimo posible.
• Aunque tampoco es requisito, se
debe tratar de mantener un estilo
consistente para la definición de los
nombres de objetos, por ejemplo, el
uso de mayúsculas o minúsculas,
letras iniciales que indiquen el tipo
de objeto (pk – llave primaria, t –
tabla, v – vista, sp – procedimiento
almacenado, tr – disparador, etc).
Hasta 30 caracteres.
Consideraciones de
tipos de datos

• Antes de crear una tabla se debe


para cada columna de la tabla:

– Determinar el tipo de dato que será


almacenado.
– Encontrar el rango de valores
posibles.
– Determinar la exactitud de columnas
numéricas.
– Si el RDBMS lo permite, utilizar tipos
de datos definidos por el usuario
para obligar la consistencia.
Tipos de Datos

• Numérico exacto (entero)


– Almacena datos con una exactitud
específica
• Numérico aproximado (real)
– Almacena datos con una exactitud
dependiente de los cálculos
desarrollados
• Money
– Datos de moneda
• Fecha y hora
– Almacena datos de fecha y hora
• Caracter
– Datos alfanuméricos
• Binarios
– Imágenes, valores byte y bit
Numéricos

• Las columnas numéricas están


diseñadas para almacenar todo tipo
de datos numéricos, como precios,
edades, cantidades, etc.
• Permiten dos opciones: UNSIGNED
y ZEROFILL. UNSIGNED no permite
el uso de números negativos
(extiende el rango positivo de los
tipos enteros) y ZEROFILL rellena el
valor con ceros en vez de los
espacios habituales, además asigna
el tipo UNSIGNED.
• En este caso, al insertar un valor
negativo, el valor se ajustará a 0 y si
se intenta insertar un valor superior
al valor máximo que admite, el valor
se ajusta al máximo valor.
• Al indicar un valor numérico en una
instrucción no se requieren comillas.
Numéricos Exactos

• TINYINT[(L)] [UNSIGNED][ZEROFILL]
Entero pequeño de -128 a 127 ó 0 a 255 (1 byte)
• BIT Sinónimo de TINYINT(1)
• BOOL Sinónimo de TINYINT(1)
• SMALLINT[(L)] [UNSIGNED][ZEROFILL]
Entero pequeño de -32,768 a 32,767 ó de 0 a 65,535
(2 bytes)
• MEDIUMINT[(L)] [UNSIGNED][ZEROFILL]
Entero mediano de -8,388,608 a 8,388,607 ó de 0 a
65,535 (3 bytes)
• INT[(L)] [UNSIGNED][ZEROFILL]
Entero de -2,147,483,648 a 2,147,483,647 ó de 0 a
4,294, 967,295 (4 bytes)
• INTEGER Sinónimo de INT
• BIGINT[(L)] [UNSIGNED][ZEROFILL]
Entero grande de -9,223,372,036,854,775,808 a
9,223,372,036,854,775,807 o de 0 a
18,446,744,073,709,551,615 (8 bytes)
• DECIMAL[(L[, D])] [UNSIGNED][ZEROFILL]
Decimal almacenado como cadena con 1 byte por
dígito, -+2,225073E-308, -+1.7976931E-308
• DEC[(L[, D])] [UNSIGNED][ZEROFILL]
Sinónimo de DECIMAL
• NUMERIC[(L[, D])] [UNSIGNED][ZEROFILL]
Sinónimo de DECIMAL
D = número de dígitos a la derecha del punto decimal
L = número total de dígitos
Numéricos Aproximados

• FLOAT(precisión) [UNSIGNED][ZEROFILL]
Real con precisión simple
• FLOAT[(L, D)] [UNSIGNED][ZEROFILL]
Real pequeño de -+1.175494351E-38, -
+3,40282346E-38 (4 bytes)
• DOUBLE[(L, D)] [UNSIGNED][ZEROFILL]
Real grande de -+2,225073E-308,-
+1.7976931E-308
• DOUBLE PRECISION[(L, D)] [UNSIGNED]
[ZEROFILL]
Sinónimo de DOUBLE (8 bytes)
• REAL[(L, D)] [UNSIGNED][ZEROFILL]
Sinónimo de DOUBLE

• Durante las operaciones aritméticas, el número


de dígitos a la derecha del punto decimal se
redondea en base a los valores en los cálculos.
Fecha y hora

• Los tipos de columna de fecha y


hora están diseñados para trabajar
con las necesidades especiales que
exigen los datos de tipo temporal y
se puede utilizar para almacenar
datos tales como la hora del día o
fechas de nacimiento.
• My SQL acepta diferentes formatos
de fecha, se puede sustituir el guión
y los dos puntos por cualquier otro
carácter de puntuación.
Fecha y hora

• DATETIME
AAAA-MM-DD HH:MM:SS desde
1000-01-01 00:00:00 a 9999-12-31
23:59:59
• DATE
AAAA-MM-DD desde 1000-01-01 a
9999-12-31
• TIMESTAMP
AAAAMMDDHHMMSS
• TIME
HH:MM:SS
• YEAR
AAAA
Fecha y hora

• El tipo de columna TIMESTAMP se


puede visualizar de diversas formas:

TIMESTAMP(14) aammddhhmmss
TIMESTAMP(12) aammddhhmmss
TIMESTAMP(10) aammddhhmm
TIMESTAMP(8) aaaammdd
TIMESTAMP(6) aammdd
TIMESTAMP(4) aamm
TIMESTAMP(2) aa

• Esto no implica pérdida de datos. El


número sólo afecta la visualización
de los datos
Caracter

• Las columnas de caracter se usan


para almacenar todo tipo de datos
compuestos de caracteres como
nombres, direcciones o artículos de
periódico.
• La principal diferencia entre char y
varchar es la cantidad de espacio
que ocupan, los atributos de tipo
char tienen una longitud fija,
mientras que las varchar tienen una
longitud máxima, pero si no ocupa
todo ese espacio, los espacios
vacíos se eliminan permitiendo que
se reduzca el tamaño ocupado.
• Las varchar aunque ocupan menos
espacio, requieren de mayor
procesamiento para su extracción de
la base de datos, por lo que son más
lentas de acceder.
Caracter

• [NATIONAL] CHAR (M) [BINARY]


Cadena de longitud fija de 0 a 255
caracteres
• CHAR Sinónimo de CHAR(1)
• [NATIONAL] VARCHAR (M) [BINARY]
Cadena de longitud variable de 0 a 255
caracteres
• TINYTEXT
Igual a TINYBLOB sin discriminar
mayúsculas y minúsculas.
• TEXT
Texto normal de 0 a 65535
• MEDIUMTEXT
Texto mediano de 0 a 224 -1
• LONGTEXT
Texto grande de 0 a 232 -1
Caracter

• Si el tamaño del dato se conoce o


puede ser de hasta 8, usar char.
• No almacenar números en columnas
de cadena.
• Usar char para mayor velocidad.
• Usar varchar para ahorrar espacio.
• Si se desea buscar texto sin
discriminar entre mayúsculas y
minúsculas, utilizar text.
• Por omisión, las búsquedas sobre
char y varchar no discriminan
mayúsculas y minúsculas, a menos
que se use BINARY.
• NATIONAL sólo se incluye por
compatibilidad con SQL ANSI.
Binarios

• Se usan para almacenar grandes


volúmenes de datos.
• BLOB es un Objeto Binario Largo
(Binary Large Object).
• Si se desea buscar texto
discriminando entre mayúsculas y
minúsculas es recomendable usar
algún blob.
• Para imágenes y otros objetos
binarios, es mejor almacenarlos en el
sistema de archivos en lugar de
directamente en la BD.
• Se recomienda usar mejor varchar
binary por ser más rápido.
Binarios

• TINYBLOB
BLOB pequeño de 0 a 255 (+1 byte
que almacena la cantidad de bytes)
• BLOB [(M)]
BLOB normal de 0 a 65535 (+2
bytes)
• MEDIUMBLOB
BLOB mediano de 0 a 224 -1 (+3
bytes)
• LONGBLOB
BLOB grande de 0 a 232 -1 o 4 GB
(+4 bytes) su longitud real depende
de la memoria disponible.
Otros Tipos

• En las nuevas versiones de SQL se


puede apreciar nuevos tipos de
datos como los enumerados y
conjuntos:

• ENUM(‘valor1’, ‘valor2’,…)
Enumeración. Solo puede tener un
de los valores especificados, ‘ ‘ ó
nulo. Máximo 65,000 caracteres.
• SET(‘valor1’, ‘valor2’,…)
Conjunto. Puede contener de cero a
64 valores de la lista especificada.

• Para limitar los contenidos de una


columna se usa enum. Si se agrega
un valor inválido, se inserta “”
• Para permitir más de una entrada se
usa set.
Limitaciones de Tipos

• Los tipos text y blob son usados para


almacenar grandes volúmenes de
datos.
• Text es usado para datos
alfanuméricos.
• Blob es usado para datos binarios.
• Se recomienda evitar estos tipos en lo
posible porque:
– Pueden causar un problema serio de
rendimiento y espacio.
– Su soporte es muy limitado (se
requieren funciones especiales para
manipularlos).
– No existen muchas herramientas de
aplicación que puedan manipular
directamente datos binarios desde la
base de datos.
Creación de Tablas

CREATE [TEMPORARY] TABLE [IF


NOT EXISTS]<nombreTabla>
(<tipo> <nombreColumna>
[<propiedadesCol>]);

• El número máximo de columnas


por tabla depende del RDBMS
(250).
• El tamaño máximo por renglón es
depende del RDBMS.
• Para obtener información acerca
de una tabla se puede usar:
desc <nombre_tabla>
Ejemplo Creación Tabla

CREATE TABLE authors


(au_id varchar(11) NOT NULL,
au_lname char(40) NOT NULL,
au_fname char(20) NOT NULL,
phone char(12) NULL,
address varchar(40) NULL,
city varchar(20) NULL,
state char(2) NULL,
zip char(5) NULL,
contract bit NOT NULL
);
Manejo de secuencias

• AUTO_INCREMENT es una propiedad


especial de las columnas que se usa para
generar un valor identificador único para
los renglones nuevos, además:
– Asignan un valor numérico secuencial para
cada renglón que es insertado.
– Pueden ser tipos de datos enteros o
numéricos, pero sólo con valores enteros.
– No pueden contener valores nulos.
– Sólo puede haber una columna
AUTO_INCREMENT por tabla.
– La columna debe ser una PK ó un índice único.
– No pueden ser modificados.
– Normalmente inician en 1 pero puede indicarse
otro valor inicial.
create [temporary] table [if not exists]
<nombreTabla> (<tipoEntero>
<nombreColumna>
AUTO_INCREMENT
primary key [<otrasPropiedadesCol>])
[auto_increment = <valorInicial>];
Ejemplo Creación Tabla

CREATE TABLE MiTabla


(columnaId int auto_increment
primary key NOT NULL,
columna2 char(40) NOT NULL,
columna3 varchar(40),
columna4 bit NOT NULL,
columna5 date,
columna6 float(5)
)
auto_increment = 50;

CREATE TABLE Cliente (


idCliente varchar(5),
nombre varchar(30),
ciudad char (2) NOT NULL
default ‘DF’,
repVentas varchar(4),
telefono varchar(12)
);
Modificar Tablas

• En ocasiones, se puede requerir que


una tabla sea modificada para
agregar una columna o restricción,
modificar alguna columna existente o
eliminar alguna columna o restricción
que ya no se requiere, para estos
casos, se puede usar la instrucción
ALTER TABLE.

• Las modificaciones que pueden


hacerse a una tabla son:
– Agregar, modificar y borrar columnas.
– Agregar, modificar y borrar restricciones.
Agregar una columna

ALTER TABLE <nombreDeTabla>


ADD <definiciónDeColumna> |
[CONSTRAINT <nombreRestricción>]
FOREIGN KEY (columna)
REFERENCES
<tablaPadre>(columnaTablaPadre) |
[CONSTRAINT <nombreRestricción>]
PRIMARY KEY (<columna>*); .

• Si la llave primaria es una llave


compuesta por más de una columna,
estas pueden indicarse dentro de los
paréntesis separadas por coma.
Modificar una columna

ALTER TABLE <nombreDeColumna>


MODIFY <nombreColumna> [ CONSTRAINT
<nombreRestricción>][<tipoDeRestricción>]
• Sólo puede modificar el tipo de dato, el valor
por omisión y la restricción de valor no nulo.
• MODIFY sólo necesita el nombre de la
columna y la parte a modificar.
– Puede cambiar una columna CHAR a
VARCHAR y viceversa si toda la columna
contiene valores nulos.
– Puede cambiar el tipo de dato y
decrementar el tamaño si todos los
renglones son null.
– En la mayoría de los DBMSs, la única
restricción que puede agregarse a una
tabla es NOT NULL, si la columna no
contiene nulos. Algunos RDBMSs permiten
modificar una tabla agregando una
restricción UNIQUE, cambiar el nombre de
una columna, cambiar el nombre de la
tabla, etc.
– Siempre es posible incrementar el tamaño
de columnas de tipo carácter o la precisión
de columnas numéricas.
Cambiar nombre columna

• La sintaxis anterior permite modificar


restricciones pero no modificar el
nombre de una columna, para hacer
esto, se puede usar CHANGE:

ALTER TABLE <nombreDeColumna>


CHANGE <nombreColumna>
<nuevoNombreColumna> <tipoDeDato>;

• Se debe indicar nuevamente el tipo de


dato o se obtendrá un error, pudiendo
cambiar también el tipo de dato en este
caso
Borrar columna

• Si se requiere eliminar una columna o


restricción se usa la cláusula DROP con la
siguiente sintaxis:
ALTER TABLE <nombreDeColumna>
DROP <nombreColumna> |
[ CONSTRAINT <nombreRestricción>] |
[<tipoDeRestricción>];
• En este caso, se puede eliminar una
restricción indicando su nombre, en caso
de que sea una restricción nombrada, o se
puede eliminar indicando el tipo de
restricción.
• Dependiendo de las restricciones
definidas, no se podrán borrar
restricciones UNIQUE o PK que sean
parte de restricciones de integridad
referencial y en la mayoría de los casos no
se pueden borrar las restricciones CHECK
o NOT NULL, en esos casos, se puede
crear otra columna, copiar los valores de
la columna con restricciones que se
desean borrar y eliminar la columna
original.
Cambiar nombre de tabla

• Por último, si se desea modificar el


nombre de la tabla, se puede indicar:

ALTER TABLE <nombreDeTabla>


RENAME <nuevoNombreTabla>;
Ejemplos de ALTER

ALTER TABLE Cliente


ADD PRIMARY KEY(idCliente);
ALTER TABLE Cliente
ADD FOREIGN KEY (repVentasFK)
REFERENCES Vendedor (idVendedor);
ALTER TABLE Cliente
ADD email VARCHAR(50);

ALTER TABLE Cliente


MODIFY email VARCHAR(60);

ALTER TABLE Cliente


CHANGE nombre nombres VARCHAR(30);

ALTER TABLE Cliente


DROP email;
ALTER TABLE Cliente
DROP PRIMARY KEY

ALTER TABLE Cliente


RENAME tCliente;
Borrar Tablas

• Para poder borrar una tabla, se


puede usar:

DROP TABLE <nombreTabla>;

• No se puede borrar una tabla que


tenga una restricción de llave
foránea en otra tabla y tampoco se
pueden borrar las tablas de sistema.

• Ejemplo:

DROP TABLE Titles;


Crear una Base de Datos

• El estándar ANSI/ISO no
especifica cómo se crean las
bases de datos y cada producto
comercial adopta un
planteamiento ligeramente
diferente.
• Las técnicas usadas por
algunos productos más
importantes son:
– Algunos crean una sola base de datos
como parte de instalación del software y
en todas las tablas se colocan siempre
en esa base de datos.
– Otros incluyen alguna herramienta
gráfica o no, o comando un comando
como parte de su DDL, por ejemplo
CREATE DATABASE o COPY, este es
el caso de MySQL o SQL Server.
Crear una Base de Datos

• La sintaxis específica de MySQL


para la creación de una base de
datos es:
CREATE {DATABASE | SCHEMA} [IF
NOT EXISTS] <nombreDeBD>
[<especificaciónBD>];

Donde:
<especificaciónBD> ::=
[DEFAULT] CHARACTER SET [=]
<nombreConjuntoCaracteres>
[DEFAULT] COLLATE [=]
<secuenciaOrdenación>
Ejemplo:
create database Banco;
create schema if not exists Banco;
Archivos en Lote

• La mayoría de las instrucciones tiene la


habilidad de ser ejecutada en lote.
• Un lote o script es un archivo de texto
que contiene un conjunto de
instrucciones SQL ejecutadas al mismo
tiempo.
• El lote será cargado y ejecutado por el
servidor.
• Esta puede ser la mejor forma de crear
una base de datos, donde los
comandos han sido probados
previamente y se puede duplicar la
estructura en cualquier momento,
permitiendo reutilizar el código.
• En este caso, es responsabilidad del
programa incluir los espacios o la
puntuación necesaria en el texto
transferido.
Archivos en Lote

• El DBMS ejecutará cada instrucción e


informará si la instrucción se ejecutó
con éxito o no.

• Algunos DBMS detendrán la ejecución


si encuentran algún error y otros
intentarán continuar con el resto de las
instrucciones.

• Dependiendo del servidor, versión y


permisos, existen algunas instrucciones
que no pueden ser ejecutadas en lote,
sin embargo, en la mayoría de los
casos se pueden incluir comentarios
para mejorar la lectura.

• En el caso de MySQL, los comentarios


pueden indicarse como
/* comentario
de varias lineas*/
ó
# comentario en una sola línea.
Archivos en Lote

• Para indicarle a MySQL que ejecute un


archivo en lote o script se puede hacer
desde la línea de comandos:

c:\mysql\bin> mysql hospital < dbhospital.sql

• Para ejecutar esta instrucción se debe


hacer desde la carpeta bin de MySQL ó
incluir esta ruta en la variable path de
sistema.

• También se puede obtener el mismo


resultado desde el modo interactivo
dentro del entorno de MySQL con el
comando source:

mysql>source c:\mysql\dbhospital.sql
Resumen Unidad 7

• Los nombres de las tablas deben ser


únicos en una base de datos
• Los nombres de columna deben ser
únicos en una tabla
• Los tipos de datos son: numéricos
exactos, numéricos aproximados,
fecha hora, caracter y binarios.
• Los tipos sin límite deben evitarse.
• Para crear una tabla se usa el
comando create table.
• El número de columnas de una tabla
puede estar limitado por el RDBMS.
• El tamaño máximo también puede
estar limitado por el RDBMS. La
propiedad auto_increment en una
columna proporciona de modo
automático un valor para los nuevos
renglones.
Resumen Unidad 7

• Para borrar una tabla se utiliza el


comando drop table.
• Para modificar una tabla se
emplea el comando alter table.
• Para crear una tabla se emplea el
comando create database.
• La mayoría de los comandos se
pueden ingresar de modo
interactivo o mediante un archivo
en lote ó script.
Ejercicios

1. Crear la tabla de Titulos a partir de


la descripción de la tabla Titles.
2. Modificar la tabla de Título para que
el precio y el anticipo manejen
decimales.
3. Borrar la tabla de Titulos.
4. Crear un script para crear una base
de datos Publicaciones con las
tablas de Autor, Titulo y Editorial.
(No olvidar usar la base de datos
antes de crear las tablas).

You might also like