Definición de claves para tablas y restricciones

  • 06 de abril de 2005
  • Valoración:
  • 8 Comentarios
  • Lenguaje SQL
Vemos claves primarias y claves externas (foreing keys) y aprendemos a aplicar restricciones a los distintos campos de las tablas.
Clave primaria: Primary key

Es una columna o un conjunto de columnas que identifican unívocamente a cada fila. Debe ser única, no nula y obligatoria. Como máximo, podemos definir una clave primaria por tabla.
Esta clave se puede referenciar por una columna o columnas. Cuando se crea una clave primaria, automáticamente se crea un índice que facilita el acceso a la tabla.

Formato de restricción de columna:

   CREATE TABLE NOMBRE_TABLA
(COL1 TIPO_DATO [CONSTRAINT NOMBRE_RESTRICCION] PRIMARY KEY
   COL2 TIPO_DATO

)[TABLESPACE ESPACIO_DE_TABLA];


Formato de restricción de tabla:

   CREATE TABLE NOMBER_TABLA
   (COL1 TIPO_DATO,
   COL2 TIPO_DATO,

[CONSTRAINT NOMBRERESTRICCION] PRIMARY KEY (COLUMNA [,COLUMNA]),

)[TABLESPACE ESPACIO_DE_TABLA];


Claves ajenas: Foreign Key:

Esta formada por una o varias columnas que están asociadas a una clave primaria de otra o de la misma tabla. Se pueden definir tantas claves ajenas como se precise, 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).

Formato de restricción de columna:

   CREATE TABLE NOMBRE_TABLA
   (COLUMNA1 TIPO_DATO
   [CONSTRAINT NOMBRERESTRICCION]
REFERENCES NOMBRETABLA [(COLUMNA)] [ON DELETE CASCADE]
      …
      )[TABLESPACE ESPECIO_DE_TABLA];


Formato de restricción de tabla:

   CREATE TABLE NOMBRE_TABLA
   (COLUMNA1 TIPO_DATO,
   COLUMNA2 TIPO_DATO,
   …
   [CONTRAINT NOMBRERESTRICCION]
   FOREIGN KEY (COLUMNA [,COLUMNA])
      REFERENCES NOMBRETABLA [(COLUMNA [,
      COLUMNA])]
         [ON DELETE CASCADE],
   )[TABLESPACE ESPACIO_DE_TABLA];


Notas:

  • En la cláusula REFERENCES indicamos la tabla a la cual remite la clave ajena.
  • Hay que crear primero una tabla y después aquella que le hace referencia.
  • Hay que borrar primero la tabla que hace referencia a otra tabla y después la tabla que no hace referencia.
  • Borrado en cascada (ON DELETE CASCADE): Si borramos una fila de una tabla maestra, todas las filas de la tabla detalle cuya clave ajena sea referenciada se borraran automáticamente. La restricción se declara en la tabla detalle. El mensaje "n filas borradas" solo indica las filas borradas de la tabla maestra.
NOT NULL: Significa que la columna no puede tener valores nulos.
DEFAULT: Le proporcionamos a una columna un valor por defecto cuando el valor de la columna no se especifica en la cláusula INSERT. En la especificación DEFAULT es posible incluir varias expresiones: constantes, funciones SQL y variables UID y SYSDATE.
Verificación de restricciones: CHECK: Actúa como una cláusula where. Puede hacer referencia a una o más columnas, pero no a valores de otras filas. En una cláusula CHECK no se pueden incluir subconsultas ni las pseudoconsultas SYSDATE, UID y USER.

Nota: La restricción NOT NULL es similar a CHECK (NOMBRE_COLUMNA IS NOT NULL)


UNIQUE: Evita valores repetidos en la misma columna. Puede contener una o varias columnas. Es similar a la restricción PRIMARY KEY, salvo que son posibles varias columnas UNIQUE definidas en una tabla. Admite valores NULL. Al igual que en PRIMARY KEY, cuando se define una restricción UNIQUE se crea un índice automáticamente.

Vistas del diccionario de datos para las restricciones:

Contienen información general las siguientes:

USER_CONSTRAINTS: Definiciones de restricciones de tablas propiedad del usuario.
ALL_CONSTRAINTS: Definiciones de restricciones sobre tablas a las que puede acceder el usuario.
DBA_CONSTRAINTS: Todas las definiciones de restricciones sobre todas las tablas.

Creación de una tabla con datos recuperados en una consulta:

CREATE TABLE: permite crear una tabla a partir de la consulta de otra tabla ya existente. La nueva tabla contendrá los datos obtenidos en la consulta. Se lleva a cabo esta acción con la cláusula AS colocada al final de la orden CREATE TABLE.

   CREATE TABLE NOMBRETABLA
   (COLUMNA [,COLUMNA]
   )[TABLESPACE ESPACIO_DE_TABLA]
   AS CONSULTA;


No es necesario especificar tipos ni tamaño de las consultas, ya que vienen determinadas por los tipos y los tamaños de las recuperadas en la consulta.
La consulta puede tener una subconsulta, una combinación de tablas o cualquier sentencia select valida.
Las restricciones CON NOMBRE no se crean en una tabla desde la otra, solo se crean aquellas restricciones que carecen de nombre.

Comentarios

Andres

15/4/2005
ESTE MANUAL ME PARECE MUY BUENO, ESPECIALMENTE PARA ESTUDIANTES COMO YO.
ESPERO QUE SE SAQUEN OTROS MANUALES MAS AVANZADOS DE SQL. GRACIAS.

zpokc

27/6/2005
Soy autodidacta, y me ineteresa aprender php y MySQL. Sus manuales estan estupendos. Muy claros y pequeños. Saludos

alexnder

03/2/2006
TEngo un gran problema con las claves secundarias. Hice todo lo que me escribieron y me dio en un caso... pero despues para otros casos no me da .. no se porque.. gracias por sus ayudas...

emlremah

08/9/2006
estan muy buenos los articulos solo siento que le falta mas informacion

Monica Farias Fernandez

12/1/2007
Si muchísimas gracias =)
desde Monterrey wu =>

Kelvin Jimenez

11/10/2008
Como puedo definir mas de un campo con primary key en una misma tabla.

Espera de su ayuda.

meee

01/7/2009
Tutoeial
Bueno , sinceramente no me parece tan bueno , será resumido pero para los que iniciamos en esto un tutorial asi de complejo y sin ejemplos ...

Lisandro

10/7/2009
PARA EL DE MYSQL Y PHP
bUSCA EN LA WEB , existe un archivo llamado (la biblia de mysql) en formato pdf , creo que con 800 paginas es suficiente para ti supongo, el manual esta muy bueno y abarca php para utilizarlo con mysql

Compartir