Vous êtes sur la page 1sur 16

SQL-DDL

2 ASIR

CIP de FP de CHESTE

ndice de contenido
Introduccin..........................................................................................................................................2
Creacin de una tabla (CREATE TABLE)...........................................................................................3
Sintaxis.............................................................................................................................................3
Tipos de datos..................................................................................................................................5
Precisiones y escalas...................................................................................................................6
Visualizar tablas...............................................................................................................................6
Integridad de datos...............................................................................................................................7
Restricciones en CREATE TABLE.................................................................................................7
Sintxis CONSTRAINT en CREATE TABLE...........................................................................8
Clave primaria. Restriccin PRIMARY KEY.................................................................................9
Formatos de la orden CREATE TABLE para la restriccin PRIMARY KEY...........................9
Claves ajenas. Restriccin FOREIGN KEY..................................................................................10
Formatos de CREATE TABLE para definir claves ajenas........................................................10
Obligatoriedad. La restriccin NOT NULL ..................................................................................11
Formato de CREATE TABLE para definir restriccin NOT NULL.........................................11
Valores por defecto. La especificacin DEFAULT .......................................................................11
Formato de CREATE TABLE para definir restriccin DEFAULT...........................................11
Verificacin de condiciones. La restriccin CHECK ...................................................................12
Formatos de la orden CREATE TABLE con la restriccin CHECK: ......................................12
La restriccin UNIQUE ................................................................................................................13
Formatos de la orden CREATE TABLE con la restriccin UNIQUE: ....................................13
Vistas del diccionario de datos para las restricciones....................................................................14

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

TEMA 01
SQL- Creacin de tablas. Restricciones
Introduccin
Recordemos que en SQL tenemos varios tipos de rdenes, correspondientes al lenguaje
de manipulacin de datos (DML), de definicin de datos (DDL) o de control de datos
(DCL)

* No existan en el estndar SQL1


En ste tema usaremos el lenguaje de descripcin de datos o DDL (Data Description
Language).
Manejaremos las rdenes CREATE, DROP y ALTER.
La orden CREATE sirve para crear objetos de base de datos: tablas, vistas, sinnimos,
etc. La orden DROP permite eliminar un objeto. Mediante la orden ALTER podemos
modificar un objeto de base de datos. Adems veremos cmo incluir restricciones

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Creacin de una tabla (CREATE TABLE)


Aspectos importantes a tener en cuenta antes de crear una tabla
1. Nombre de la tabla.

Debe ser descriptivo de su contenido.


Por ejemplo, la tabla denominada ALUMNOS contendr datos sobre
alumnos.

Puede tener de 1 a 30 caracteres de longitud.

Su primer carcter debe ser alfabtico y el resto pueden ser letras, nmeros
y el carcter de subrayado.

Debe ser nico y no puede ser una palabra reservada de Oracle.

2. El nombre de cada columna de la tabla.

Debe ser un nombre descriptivo, que


Por ejemplo, DNI, NOMBRE o APELLIDOS.

identifique

su

contenido.

3. Tipo de dato y tamao de cada columna


4. Indicar columnas obligatorias (NOT NULL) , valores por defecto (DEFAULT),
restricciones (CONSTRAINT), etc

Sintaxis
Para crear una tabla usamos la orden CREATE TABLE, cuyo formato ms simple es:
CREATE TABLE Nombretabla
(
Columna1 Tipo_dato [NOT NULL],
Columna2 Tipo_dato [NOT NULL],
................
) [TABLESPACE espacio_de_tabla];
Donde:

Columna1, Columna2 son los nombres de las columnas que contendr cada fila.

Tipo_dato indica el tipo de dato (VARCHAR2, NUMBER, etctera) de cada


columna.

TABLESPACE espacio_de_tabla seala el TABLESPACE para almacenar la tabla.

NOT NULL indica que la columna debe contener alguna informacin; nunca puede
ser nula.

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Observaciones:

Las definiciones de columnas se separan por comas

No se pone coma despus de la ltima definicin de columna

Las maysculas y minsculas son indiferentes a la hora de crear una tabla

Los usuarios pueden consultar las tablas creadas por medio de la vista

USER_TABLES

Esta vista contiene informacin acerca de las tablas:

Nombre de la tabla

Nombre del tablespace

Nmero de filas

Informacin de almacenamiento, etc..

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Tipos de datos

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Precisionesyescalas

Visualizar tablas
Los usuarios pueden consultar las tablas creadas por medio de la vista USER_TABLES.
Esta vista contiene informacin acerca de las tablas: nombre de la tabla, nombre del
Para visualizar el nombre de las tablas creadas, usaremos
SELECT table_name FROM user_tables;
Si queremos comprobar la estructura de campos de la vista

USER_TABLES

DESC user_tables
USER_TABLES

es una vista de informacin de objetos (tablas) que hay en nuestra base de


datos, se pueden hacer consultas sobre ella como sobre cualquier otra tabla.
La vista ALL_TABLES te muestra informacin de las tablas, sobre las que tienes algn
privilegio. Si queremos ver las tablas de un determinado usuario, usaremos el campo
owner de dicha tabla.
Select table_name from all_tables wher owner='ASGB'
Existen otras dos vistas que permiten obtener informacin de los objetos que son propiedad del usuario:

USER_OBJECTS:

objetos que son propiedad del usuario.


USER_CATALOG: tablas, vistas, sinnimos y secuencias propiedad del usuario.

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Integridad de datos
Cuando almacenamos datos en las tablas, se ajustan a unas determinadas
restricciones. Por ejemplo una dato no puede ser negativo, debe variar entre un rango de
valores, no puede ser cero, se debe almacenar en maysculas, etc.
De este modo la base de datos nos garantiza que no se van a producir fallos cuando
se introducen dichos datos, porque el sistema va a avisar de que ese dato no es correcto.
La integridad hace referencia a que todos los datos introducidos deben ajustarse a
restricciones antes de almacenarlos.
Una restriccin de integridad es pues, una regla que restringe el rango de valores
vlidos para una o ms columnas.
Hay otro tipo de integridad que es la referencial, sta garantiza que los valores de
una columna de la tabla que dependan de los valores de otra columna de otra tabla
mantengan la coherencia cuando se hacen modificaciones o se borran datos.
De este modo, si se ha definido integridad referencial entre las tablas ventas y
productos, no se podr introducir una venta de un producto que no exista.

Restricciones en CREATE TABLE


La orden CREATE TABLE permite definir distintos tipos de restricciones sobre una tabla:

Claves primarias
Claves ajenas
Obligatoriedad
Valores por defecto
Verificacin de condiciones.

Para definir las restricciones en la orden CREATE TABLE usamos la clusula


CONSTRAINT.
sta puede restringir:
Una sola columna (restriccin de columna)
Un grupo de columnas de una misma tabla (restriccin de tabla).
Hay dos modos de especificar restricciones:

En la definicin de columnas (una restriccin de columna)


Al final, una vez especificadas todas las columnas (una restriccin de tabla).

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

SintxisCONSTRAINTenCREATETABLE

Con restriccin de columna (la restriccin forma parte de la definicin de la


columna:)

Con restriccin de tabla. Se definen al final y una misma restriccin puede afectar a
ms de una columna

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Clave primaria. Restriccin PRIMARY KEY


Una clave primaria dentro de una tabla es una columna o un conjunto de columnas que
identifican unvocamente a cada fila.

Debe ser nica, no nula y obligatoria.

Como mximo podemos definir una clave primaria por tabla.

Esta clave se puede referenciar por una


columna o columnas de otra tabla. Llamamos clave ajena a esta columna o
columnas.

Cuando se crea una clave primaria, automticamente se crea un ndice que facilita
el acceso a la tabla.

Para definir una clave primaria en una tabla usamos la restriccin PRIMARY KEY.

FormatosdelaordenCREATETABLEparalarestriccinPRIMARYKEY

Restriccin de columna:
CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO [CONSTRAINT nombrerestriccin]
PRIMARY KEY,
Columna2 TIPO_DE_DATO,
...
) [TABLESPACE espacio_de_tabla];

Restriccin de tabla:
CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO,
Columna2 TIPO_DE_DATO,
...
[CONSTRAINT nombrerestriccin] PRIMARY KEY (columna [,
columna]),

...
) [TABLESPACE espacio_de_tabla];

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Claves ajenas. Restriccin FOREIGN KEY


Una clave ajena est formada por una o varias columnas que estn asociadas a una clave
primaria de otra o de la misma tabla.
Se pueden definir tantas claves ajenas como sea preciso, y pueden estar o no en la
misma tabla que la clave primaria.
El valor de la columna o columnas que son claves ajenas debe ser NULL o igual a un
valor de la clave referenciada (regla de integridad referencial).
FormatosdeCREATETABLEparadefinirclavesajenas

Formato de restriccin de columna.


La clave ajena se define en la descripcin de la columna usando la clusula
references:
CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO [CONSTRAINT nombrerestriccin]
REFERENCES Nombretabla [(columna)]
[ON DELETE {NO ACTION| CASCADE |SET NULL|SET DEFAULT }],
...
Columna2 TIPO_DE_DATO, ...
) [TABLESPACE espacio_de_tabla];

Formato de restriccin de tabla.


La clave ajena se define al final de todas las columnas empleando las clusulas
FOREIGN y REFERENCES:
CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO,
Columna2 TIPO_DE_DATO,
...
[CONSTRAINT nombrerestriccin] FOREIGN KEY (columna
[, columna]) REFERENCES Nombretabla [(columna[,
columna])] [ON DELETE {NO ACTION| CASCADE |SET NULL|SET
DEFAULT }],
...
) [TABLESPACE espacio_de_tabla];
En la clusula REFERENCES1 indicamos la tabla a la cual apunta la clave ajena. A la derecha
de FOREIGN KEY y, entre parntesis, indicamos la columna o columnas que forman parte de
la clave ajena. La clusula ON DELETE CASCADE o borrado en cascada se define cuando al
borrar las filas asociadas con claves primarias deseamos que se eliminen

1 Ver integridad referencial al final del tema


Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

automticamente las filas con claves ajenas que referencien a dichas claves.

Obligatoriedad. La restriccin NOT NULL


Esta restriccin asociada a una columna significa que no puede tener valores nulos,
que obligatoriamente debe tener un valor. En caso contrario, provocar un error.

FormatodeCREATETABLEparadefinirrestriccinNOTNULL

CREATE TABLE nombre_tabla


(
Columna1 TIPO_DE_DATO [CONSTRAINT nombrerestriccin] NOT
NULL,
Columna2 TIPO_DE_DATO
...
) [TABLESPACE espacio_de_tabla];

Valores por defecto. La especificacin DEFAULT


En el momento de crear una tabla podemos asignar valores por defecto a las columnas.
Si especificamos la clusula DEFAULT a una columna, le proporcionamos un valor por
omisin cuando el valor de la columna no se especifica en la clusula INSERT.

En la especificacin DEFAULT es posible incluir varias expresiones: constantes,


funciones SQL y variables UID y SYSDATE.

No se puede hacer referencias a columnas o a funciones PL/SQL.

FormatodeCREATETABLEparadefinirrestriccinDEFAULT

CREATE TABLE nombre_tabla


(
Columna1 TIPO_DE_DATO [CONSTRAINT nombrerestriccin]
DEFAULT valor_por_defecto,
Columna2 TIPO_DE_DATO
...
) [TABLESPACE espacio_de_tabla];
Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Verificacin de condiciones. La restriccin CHECK


En algunos casos, las columnas de tablas deben incluir valores limitados dentro de un
rango o el cumplimiento de ciertas condiciones.

La restriccin de verificacin de condiciones sirve para expresar una condicin que


ha de cumplirse para todas y cada una de las filas de la tabla en el campo
(columna) indicado.

La restriccin check acta como una clusula where.

Puede hacer referencia a una o a ms columnas, pero no a valores de otras filas.

En una clusula check no cabe incluir subconsultas ni las pseudocolumnas


sysdate, uid, user.

FormatosdelaordenCREATETABLEconlarestriccinCHECK:

Formato de restriccin de columna:


CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO
CONSTRAINT [nombrerestriccin] CHECK (condicin),
Columna2 TIPO_DE_DATO
...
) [TABLESPACE espacio_de_tabla];

Formato de restriccin de tabla:


CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO,
Columna2 TIPO_DE_DATO,
...
[CONSTRAINT nombrerestriccin] CHECK (condicin),
...
) [TABLESPACE espacio_de_tabla];

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

La restriccin UNIQUE
Evita valores repetidos en la misma columna. Puede contener una o varias columnas.

Es similar a la restriccin PRIMARY KEY, salvo que PRIMARY KEY slo hay una
declaracin y UNIQUE puede haber varias que afecten a varias columnas
definidas en la tabla.

Admite valores NULL.

Al igual que en PRIMARY KEY, cuando se define una restriccin UNIQUE se crea
un ndice automticamente.

FormatosdelaordenCREATETABLEconlarestriccinUNIQUE:

Formato de restriccin de columna:


CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO [CONSTRAINT nombrerestriccin] UNIQUE,
Columna2 TIPO_DE_DATO
...
) [TABLESPACE espacio_de_tabla];

Formato de restriccin de tabla:


CREATE TABLE nombre_tabla
(
Columna1 TIPO_DE_DATO,
Columna2 TIPO_DE_DATO,
...
[CONSTRAINT nombrerestriccin] UNIQUE (columna [,columna]),
...
) [TABLESPACE espacio_de_tabla];

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Nombres de las restricciones


En los nombre de las restricciones podemos seguir el siguiente criterio 2:
Dos letras para el tipo de la restriccin guin bajo nombre de tabla 3 nombre de columna4
Ejemplos : PK_cliente_dni

FK_cliente_codprovin NN_cliente_nombre

Integridad referencial
La integridad referencial es una herramienta imprescindible de las bases de datos
relacionales. Pero provoca problemas. Por ejemplo, si borramos un registro en la tabla
principal que est relacionado con uno o varios de la secundaria ocurrir un error, ya que
de permitrsenos borrar el registro ocurrir fallo de integridad (habr claves secundarios
refirindose a una clave principal que ya no existe)
Por ello se nos pueden ofrecer soluciones a aadir tras la clusula

2
3
4

REFERENCES.

Son:

ON DELETE SET NULL.

Coloca nulos todas las claves secundarias relacionadas con


la borrada

ON DELETE CASCADE.

Borra todos los registros cuya clave secundaria es igual que


la clave del registro borrado

ON DELETE SET DEFAUTL .

Coloca en el registro relacionado el valor por defecto en la


columna relacionada.

ON DELETE NO ACTION

No hace nada

Tambin podra ser incluyendo el cdigo del tipo de restriccin al final. Nosotros en las prcticas lo usaremos al principio
Se puede simplificar usando slo los cuatro primeros caracteres si no crea ambigedad
Se puede simplificar usando slo los cuatro primeros caracteres si no crea ambigedad

Curso 2014-15

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Vistas del diccionario de datos para las restricciones


Existen en Oracle vistas que contienen informacin referente a las restricciones que se
han definido en las tablas. Son las siguientes
USER_CONSTRAINTS:
ALL_CONSTRAINTS:

Definiciones de las restricciones de tablas propiedad del usuario

Definiciones de restricciones sobre las tablas a las que puede acceder


el usuario

DBA_CONSTRAINTS:

Todas las definiciones de restricciones sobre todas las tablas

El tipo de restriccin puede ser:


C Restricciones tipo CHEK
R Restricciones FOREIGN KEY
P Restriccin PRIMARY KEY
U Restriccin UNIQUE
Para informacin sobre restricciones en las columnas tenemos
USER_CONS_COLUMNS:
ALL_CONS_COLUMNS:

DBA_CONS_COLUMNS:

Curso 2014-15

informacin sobre restricciones de columnas en las tablas

informacin sobre las restricciones de columnas en tablas a las que


puede acceder el usuario
informacin sobre todas las restricciones de columnas

M Jos Samper

SQL-DDL
2 ASIR

CIP de FP de CHESTE

Bibliografa
Sistema Gestores de Bases de Datos. Mc-Graw Hill
http://www.mundoracle.com/el-lenguaje-sql.html?Pg=sql_plsql_2.htm
Oracle Database SQL Language Reference
Consultas SQL tiles para obtener informacin sobre Oracle Database
http://es.wikipedia.org/wiki/SQL
Ayuda para Oracle

Curso 2014-15

M Jos Samper