Las restricciones se puede definir cuando creamos la tabla (CREATE TABLE) o posteriormente con la sentencia ALTER TABLE.
Las posibles restricciones son:
- NOT NULL
- UNIQUE
- PRIMARY KEY
- FOREIGN KEY
- CHECK
- DEFAULT
La restricción NOT NULL sirve para
especificar que una columna no acepta el valor NULL, es decir, que esa columna
siempre tiene que tener algún valor, no puede estar vacía.
Ejemplo SQL NULL
CREATE TABLE personas { nombre
varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, apellido2 varchar(255)
}
Esta sentencia crea una tabla denominada 'personas',
donde tenemos 3 columnas.
Las columnas 'nombre' y 'apellido' llevan NOT NULL,
esto quiere decir que cualquier fila insertada en esta tabla tiene que tener
algún valor para las columnas 'nombre' y 'apellido1'.
La restricción UNIQUE identifica de
manera única a cada fila de una tabla.
Puede haber varias restricciones UNIQUE en diferentes
columnas de una tabla.
Existen varias formas diferentes de sintaxis según el
sistema de base de datos utilizado:
Ejemplo SQL UNIQUE para la base de datos MySQL
CREATE TABLE personas
{
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
UNIQUE (identificador)
}
{
identificador int NOT NULL,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
UNIQUE (identificador)
}
La sentencia anterior crea la tabla 'personas' con 4
columnas, donde la columna 'identifcador' tiene un valor diferente para cada
fila de la tabla.
Si intentamos insertar un fila con un identificador
que ya exista, nos dará un error, y no nos dejará insertarlo.
Ejemplo SQL UNIQUE para las bases de datos ORACLE,
SQLSERVIR, ACCESS
CREATE TABLE personas
{
identificador int NOT NULL UNIQUE,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
}
{
identificador int NOT NULL UNIQUE,
nombre varchar(255) NOT NULL,
apellido1 varchar(255) NOT NULL,
apellido2 varchar(255),
}
La clave primaria, PRIMARY KEY, identifica
de manera única cada fila de una tabla.
La columna definida como clave primaria (PRIMARY
KEY) debe ser UNIQUE (valor único) y NOT NULL (no puede contener valores
nulos).
Cada tabla sólo puede tener una clave primaria (PRIMARY
KEY).
Ejemplo PRIMARY KEY , clave primaria
en MySQL
CREATE TABLE personas { identificador
int NOT NULL, nombre varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL,
PRIMARY KEY (identificador) }
Ejemplo PRIMARY KEY , clave primaria
en ORACLE, SQLSERVER, ACCESS
CREATE TABLE personas { identificador int NOT NULL PRIMARY KEY, nombre
varchar(255) NOT NULL, apellido1 varchar(255) NOT NULL, }
La clave primaria (PRIMARY KEY) puede estar compuesta
por varias columnas, por ejemplo por las columnas 'identificador' y 'nombre',
entonces se define así:
CREATE TABLE personas { identificador int NOT NULL, nombre varchar(255) NOT
NULL, apellido1 varchar(255) NOT NULL, CONSTRAINT pers PRIMARY KEY
(identificador, nombre) }
La clave primaria también se puede definir después de
haber creado la tabla, para eso utilizaremos el comando ALTER TABLE
Ejemplo PRIMARY KEY con ALTER TABLE ALTER TABLE personas ADD PRIMARY KEY
(identificador)
Ejemplo PRIMARY KEY multiple ALTER TABLE ALTER TABLE personas CONSTRAINT
pers PRIMARY KEY (identificador, nombre)
La clave externa o FOREIGN KEY, es una
columna o varias columnas, que sirven para señalar cual es la clave primaria de
otra tabla.
La columna o columnas señaladas como FOREIGN
KEY, solo podrán tener valores que ya existan en la clave primaria PRIMARY
KEY de la otra tabla.
Ejemplo de FOREIGN KEY
Tabla "departamentos", con la clave primaria
"dep"
dep
|
departamento
|
1
|
ADMINISTRACION
|
2
|
INFORMATICA
|
3
|
COMERCIAL
|
Tabla personas, con una clave externa FOREIGN KEY 'dep', que hace referencia a la clave primaria 'dep' de la tabla anterior 'departamentos' y por tanto, solo puede tener un valor de los que tiene en esa tabla
per
|
nombre
|
apellido1
|
apellido2
|
dep
|
1
|
ANTONIO
|
PEREZ
|
GOMEZ
|
1
|
2
|
ANTONIO
|
GARCIA
|
RODRIGUEZ
|
2
|
3
|
PEDRO
|
RUIZ
|
GONZALEZ
|
4
|
Definiciones de FOREIGN KEY en CREATE TABLE para MySQL
CREATE TABLE departamentos { dep int NOT NULL,
departamento varchar(255),
PRIMARY KEY (dep)
}
CREATE TABLE personas
{
per int NOT NULL,
nombre varchar(255),
apellido1 varchar(255),
dep int NOT NULL,
PRIMARY KEY (per),
FOREIGN KEY (dep) REFERENCES departamentos(dep)
}
departamento varchar(255),
PRIMARY KEY (dep)
}
CREATE TABLE personas
{
per int NOT NULL,
nombre varchar(255),
apellido1 varchar(255),
dep int NOT NULL,
PRIMARY KEY (per),
FOREIGN KEY (dep) REFERENCES departamentos(dep)
}
Definiciones
de FOREIGN KEY en CREATE TABLE para ORACLE, ACCESS, SQLSERVER
CREATE TABLE departamentos
{
dep int NOT NULL PRIMARY KEY,
departamento varchar(255),
}
CREATE TABLE personas
{
per int NOT NULL PRIMARY KEY,
nombre varchar(255),
apellido1 varchar(255),
dep int FOREIGN KEY REFERENCES departamentos (dep)
}
{
dep int NOT NULL PRIMARY KEY,
departamento varchar(255),
}
CREATE TABLE personas
{
per int NOT NULL PRIMARY KEY,
nombre varchar(255),
apellido1 varchar(255),
dep int FOREIGN KEY REFERENCES departamentos (dep)
}
Si la clave externa o foránea (FOREIGN KEY)
está compuesta por varias columnas o queremos ponerle un nombre, utilizaremos
la fórmula siguiente:
CONSTRAINT fkpersonas FOREIGN KEY (dep, id) REFERENCES
departamentos(dep,id).
Ejemplo FOREIGN
KEY con ALTER TABLE
ALTER TABLE ADD FOREIGN KEY (dep) REFERENCES departamentos(dep)
Ejemplo FOREIGN
KEY múltiple (varias columnas) con ALTER TABLE:
ALTER TABLE ADD CONSTRAINT fkpersonas FOREIGN KEY (dep) REFERENCES
departamentos(dep)
Para borrar un clave externa (FOREIGN KEY)
utilizamos DROP, pero varía según la base de dato:
Borrar FOREIGN KEY en MySQL ALTER TABLE personas DROP FOREIGN KEY dep
Borrar FOREIGN
KEY en ORACLE, SQLSERVER y ACCESS
ALTER TABLE personas DROP CONSTRAINT dep
La restricción CHECK se utiliza para
limitar el rango de valores que puede tener una columna.
Se pueden definir varias restricciones CHECK en
una tabla.
Ejemplo CHECK en
MySQL
CREATE TABLE departamentos { dep int NOT NULL, departamento varchar(255),
CHECK (dep>0) }
Ejemplo CHECK en
ORACLE, SQLSERVER y ACCESS:
CREATE TABLE departamentos { dep int NOT NULL CHECK (dep>0) departamento
varchar(255), }
Ejemplo CHECK en
ALTER TABLE en MySQL
ALTER TABLE departamentos ADD CHECK (dep>0)
Ejemplo CHECK (con
múltiples columnas) en ALTER TABLE en MySQL
ALTER TABLE personas ADD CHECK (per>0, edad>35)
Ejemplo CHECK en
ALTER TABLE en ORACLE, SQLSERVER y ACCESS
ALTER TABLE departamentos ADD CONSTRAINT ckdepart CHECK (dep>0)
Ejemplo CHECK en ALTER TABLE con
varias columnas
ALTER TABLE personas ADD CONSTRAINT
ckpersona CHECK (pers>0, nombre='antonio')
La restricción DEFAULT se utiliza
para establecer un valor por defecto a una columna.
Si no se especifica un valor al insertar una fila,
entonces se podrá el valor por defecto (DEFAULT) que tenga cada columna.
SQL DEFAULT en la sentencia
CREATE TABLE
CREATE TABLE pedidos { idpedido int, producto int,
cantidad int, fecha date DEFAULT GETDATE() }
Si al crear un pedido, no especificamos el valor de la
columna 'fecha', entonces para esa columna se insertará por defecto obtenido de
ejecutar la funcion GETDATE(), que devuelve la fecha del sistema
En lugar de una función, podemos insertar una valor concreto
'2001-01-01' o cualquier otro valor.
SQL DEFAULT en la sentencia ALTER TABLE para MySQL
ALTER TABLE pedidos ALTER fecha DEFAULT
'2012-01-01'
SQL DEFAULT en la sentencia ALTER TABLE para ORACLE,
SQLSERVER, ACCESS:
ALTER TABLE pedidos ALTER COLUMN fecha
SET DEFAULT '2012-01-01'
Para borrar DEFAULT en MySQL
ALTER TABLE pedidos ALTER fecha DROP
DEFAULT
Para borrar DEFAULT en ORACLE, SQLSERVER, ACCESS:
ALTER TABLE pedidos ALTER COLUMN fecha
DROP DEFAULT
Bueno amigos, espero que este blog les sirva a aquellos que empiezan en lo que es BASE DE DATOS... Salu2...
contador de paginas web
Comentarios
Publicar un comentario