You are on page 1of 25

Crear Tablas

Se emplea un comando del DDL: CREATE TABLE

CREATE TABLE [esquema.]tabla


(columna tipo_dato [DEFAULT expr] [restricción_columna],

[restricción_tabla]);

esquema es el mismo nombre que el del propietario.


tabla es el nombre de la tabla.
DEFAULT expr especifica el valor por omisión si el mismo no en la
sentencia INSERT.
columna es el nombre de la columna.
tipo_dato es el tipo de dato y longitud de la columna.
restricción_columna es una restricción de integridad de la columna.
restricción_tabla es una restricción de integridad de la tabla y se puede aplicar
sobre cualquier coluna de la tabla (excepto NOT NULL).
Crear Tablas: Ejemplo

SQL> CREATE TABLE oficinas_bak


2 (id_oficina NUMBER(2,0) CONSTRAINT ofic_bak_pk PRIMARY KEY
3 ,nombre VARCHAR2(30) CONSTRAINT ofic_bak_nombre_nn NOT NULL
4 ,domicilio VARCHAR2(50) CONSTRAINT ofic_bak_domicilio_nn NOT NULL
5 ,cod_post_zona VARCHAR2(3)
6 ,objetivo_vtas NUMBER(9,2) DEFAULT 0
7 ,ventas NUMBER(9,2) DEFAULT 0
8 ,cod_post NUMBER(4,0) CONSTRAINT ofic_bak_cod_post_nn NOT NULL
9 ,cod_post_aux NUMBER(2,0) CONSTRAINT ofic_bak_cod_post_aux_nn
NOT NULL
10 ,id_vend NUMBER(3,0) CONSTRAINT ofic_bak_vend_fk REFERENCES
vendedores (id_vend)
11 ,CONSTRAINT ofic_bak_loc_fk FOREIGN KEY (cod_post,cod_post_aux)
REFERENCES localidades (cod_post ,cod_post_aux)
);
Crear Tablas: tipos de restricciones

Las restricciones son importantes para asegurar la integridad de los datos


en la Base de Datos. Las restricciones se chequean cuando se ingresan,
actualizan o eliminan datos de una tabla

Restricción Descripción
NOT NULL Especifica que la columna no puede contener un valor nulo

UNIQUE Especifica que los valores de una columna, o combinación


de columnas, deben ser únicos para todas las filas en la tabla
PRIMARY KEY Identifica unívocamente a cada fila de la tabla
FOREIGN KEY Establece y garantiza una relación de clave foránea entre la
columna y una columna de la tabla referenciada
CHECK Especifica una condición que debe ser verdadera
Crear Tablas: restricciones

8Las restricciones tienen un nombre y se almacenan en el Diccionario de Datos


8Se crean en el momento que se generan las tablas
8Se pueden agregar (ALTER TABLE ADD) después de la creación de tablas
y se pueden activar(ENABLE) ó desactivar (DISABLE)
8Se pueden definir a nivel de columna ó a nivel de tabla

Restricción NOT NULL


La restricción NOT NULL asegura que en la columna no admita valores nulos
Se puede especificar sólo a nivel de columna
Por omisión las columnas admiten valores nulos
Restricción PRIMARY KEY

8Sólo una clave primaria por tabla. Es una columna, o conjunto de ellas,
que identifican unívocamente a cada fila de una tabla.
8Ninguna columna de la clave primaria pueda contener un valor nulo.
8Puede definirse a nivel de columna o de tabla.
8Una clave primaria compuesta se crea usando la definición a nivel de tabla.
8Se crea automáticamente un índice para la columna/s PRIMARY KEY.

CREATE TABLE dept


(deptno NUMBER(2),
dname VARCHAR2(9),
loc VARCHAR2(10) ,
CONSTRAINT pk_dept PRIMARY KEY (deptno) );
Restricción FOREIGN KEY

8Foreign Key  Integridad Referencial


8Designa a una columna/s como clave foránea y establece una relación con una
` clave primaria o clave única de la misma tabla o de otra tabla
8El valor de la clave foránea debe ser del mismo tipo que el de la tabla a la
que referencia o debe ser NULL
8Puede definirse a nivel de columna o de tabla
8Una clave foránea compuesta se crea usando la definición a nivel de tabla
8Las claves foráneas se basan en valores de datos y son lógicas (no punteros)
8Una clave foránea compuesta por una clave primaria no puede tener valores
nulos
8La clave foránea se define en la tabla hija, y la tabla que contiene la columna
referenciada es la tabla padre
Restricción FOREIGN KEY

FOREIGN KEY se usa para definir la columna en la tabla hija, cuando se


establece la restricción a nivel de tabla.
REFERENCES identifica la tabla y columna/s de la tabla padre
ON DELETE CASCADE indica que cuando se borra la fila en la tabla padre
las filas dependientes en la tabla hija, también serán borradas
Sin la opción ON DELETE CASCADE, la fila en la tabla padre no puede
ser borrada mientras haya referencias a ella en la tabla hija
CREATE TABLE emp
(empno NUMBER(4),
ename VARCHAR2(10),
hiredate DATE,
sal NUMBER(7,2),
comm NUMBER(7,2),
deptno CONSTRAINT fk_deptno REFERENCES dept(deptno) );
Previamente se debe haber definido DEPTNO en la tabla DEPT,
como clave primaria ó unica !!!
Restricción FOREIGN KEY

Sentencias DML permitidas por las acciones de integridad referencial


cuando se ejecutan sobre claves primarias/únicas de la tabla padre, o sobre
claves foráneas de la tabla hijo
Sentencia DML Ejecutada en la tabla padre Ejecutada en la tabla hijo
INSERT Sin problemas si los valores Sin problemas si el valor de
de la clave son únicos la clave foránea existe en la
tabla padre o es parcial
o totalmente nula
UPDATE Permitida si la sentencia no Permitida si la nueva clave
deja alguna fila en la tabla foránea tiene su valor corres-
hijo sin su correspondiente pondiente en la tabla padre
valor en la tabla padre
DELETE Restrict Permitida si ninguna fila Sin problemas
de la tabla hijo referencia el
valor de la clave en la tabla
padre
DELETE Cascade Sin problemas Sin problemas
Restricción UNIQUE Key

8Define a una columna o combinación de ellas como una clave única


8Dos filas en la misma tabla no pueden tener el mismo valor para esta clave
8Se permiten valores nulos aún cuando la clave se base en una sola columna
8Se pueden definir como restricción a nivel de columna o a nivel de tabla
(para claves compuestas no hay otra opción posible)
8Automáticamente se crea un índice para una restricción UNIQUE
8En una restricción UNIQUE compuesta que admita valores NULOS dos
filas tendrán igual valor de clave si tienen los mismos valores en los campos
que NO SON NULOS
Crear Tablas: ejemplos restricción UNIQUE Key

Ejemplo 1
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(9) CONSTRAINT unq_dname UNIQUE,
loc VARCHAR2(10) );

Ejemplo 2
CREATE TABLE dept
(deptno NUMBER(2),
dname VARCHAR2(9),
loc VARCHAR2(10),
CONSTRAINT unq_dname UNIQUE (dname));

Ejemplo 3
ALTER TABLE census
ADD CONSTRAINT unq_city_state
UNIQUE (city, state);
Restricción CHECK

CREATE TABLE dept


(deptno NUMBER CONSTRAINT check_deptno
CHECK (deptno BETWEEN 10 AND 99) DISABLE,
dname VARCHAR2(9) CONSTRAINT check_dname
CHECK (dname = UPPER(dname)) DISABLE,
loc VARCHAR2(10) CONSTRAINT check_loc
CHECK (loc IN (’DALLAS’,’BOSTON’,’NEW YORK’,’CHICAGO’))
DISABLE);
Modificando Tablas: ALTER TABLE

Se puede modificar la estructura de las tablas empleando ALTER TABLE


Con este comando es posible también:
8agregar columnas
8modificar la longitud de las columnas
8agregar o eliminar restricciones
8habilitar o deshabilitar restricciones

Otras sentencias SQL relacionadas


DROP TABLE elimina las filas como la estructura de una tabla
TRUNCATE para eliminar todas las filas de una tabla
Todos esos comandos son de definición de datos o DDL
Estas sentencias tienen un commit automático
No se puede hacer un rollback sobre comandos DDL
Agregar una Columna

Se emplea ALTER TABLE con la cláusula ADD


ALTER TABLE tabla
ADD (columna tipo_dato [DEFAULT expr] [NOT NULL]
[,columna tipo_dato ] ... );

tabla es el nombre de la tabla


columna es el nombre de la nueva columna
tipo_dato es el tipo de dato y longitud de la nueva columna
DEFAULT expr especifica el valor por defecto para una nueva columna.
NOT NULL agrega una restricción de NOT NULL para la nueva columna
Ejemplo: SQL> ALTER TABLE vendedores_bak
2 ADD ( tipo_doc NUMBER(1) DEFAULT 0
3 ,nro_doc NUMBER(8));
8Se pueden agregar o modificar columnas, pero no se las puede eliminar
8No se puede especificar la posición de la columna
8Si una tabla contiene filas, los campos de la nueva columna se ponen en NULL
8Solamente se pueden adicionar nuevas columnas NOT NULL en tablas vacías
Modificar una Columna

Se utiliza ALTER TABLE con la cláusula MODIFY

La modificación de la columna puede incluir cambios de :


8tipo de dato
8tamaño
8valor por defecto
8restricción NOT NULL

ALTER TABLE tabla


MODIFY (columna tipo_dato [DEFAULT expr] [NOT NULL]
[,columna tipo_dato ] ... );

tabla es el nombre de la tabla


columna es el nombre de la columna
tipo_dato es el tipo de dato y longitud de la columna
DEFAULT expr especifica el valor por defecto para una nueva columna
NOT NULL agrega una restricción NOT NULL para la nueva columna
Modificando una Columna

SQL> ALTER TABLE vendedores_bak


2 MODIFY (tipo_doc VARCHAR2(4));
MODIFY ( tipo_doc VARCHAR2(4)
*
ERROR en línea 2:
ORA-01439: column to be modified must be empty to change datatype

SQL> UPDATE vendedores_bak


2 SET tipo_doc = NULL;

SQL> ALTER TABLE vendedores_bak


2 MODIFY (tipo_doc VARCHAR2(4));
Tabla modificada.
Agregar una Restricción

ALTER TABLE tabla


ADD [CONSTRAINT restricción] tipo (columna);
tabla es el nombre de la tabla.
restricción es el nombre de la restricción.
tipo es el tipo de restricción.
columna es el nombre de la columna afectada por la restricción.

El nombre de la restricción es opcional

SQL> ALTER TABLE vendedores_bak


2 ADD CONSTRAINT vendedores_tipo_doc CHECK
3 (tipo_doc IN ('DNI','LC','LE','CIPF'));

 Se puede agregar, eliminar, habilitar o deshabilitar una restricción,


pero no se puede modificar su estructura
 Se puede agregar una restricción de NOT NULL a una columna existente
usando la cláusula MODIFY del comando ALTER TABLE.
Eliminar una Restricción

Se debe usar el comando ALTER TABLE con la cláusula DROP


El nombre de la restricción se puede obtener examinando las vistas
USER_CONSTRAINS y USER_CONS_COLUMNS del diccionario de datos

ALTER TABLE tabla


DROP PRIMARY KEY | UNIQUE (columna) |
CONSTRAINT restricción [CASCADE];

tabla es el nombre de la tabla.


columna es el nombre de la columna afectada por la restricción.
restricción es el nombre de la restricción.

La opción CASCADE hace que se elimine cualquier restricción dependiente


Cuando se elimina una restricción no esta más disponible en el DD
Habilitar/Deshabilitar una Restricción

Habilitar
ALTER TABLE table_name
ENABLE constraint constraint_name;

Deshabilitar
ALTER TABLE table_name
DISABLE constraint constraint_name;
Eliminar una Tabla

Se emplea DROP TABLE para la eliminación de una tabla


DROP TABLE tabla [CASCADE CONSTRAINTS];
SQL> DROP TABLE vendedores_bak CASCADE CONSTRAINTS;
8Se eliminan todos los datos de la tabla

Con el DROP de la tabla la BD pierde todos sus datos y sus índices asociados
CASCADE CONSTRAINTS elimina todas las restricciones de integridad
dependientes

El comando DROP TABLE, una vez ejecutado, es irreversible.


No se consulta al usuario cuando éste ejecuta el comando DROP
Manipulación de Datos

El Lenguaje de Manipulación de Datos o DML (Data Manipulation Language)


permite agregar, modificar, o eliminar datos de la base de datos.
Estos comandos están directamente relacionados con las transacciones y
el control de los cambios sobre los datos.

Los comandos de manejo de datos y control de transacciones son:


Comando Descripción
INSERT Agrega una nueva fila a una tabla
UPDATE Modifica filas de una tabla
DELETE Elimina filas de una tabla
COMMIT Hace permanentes todos los cambios pendientes
SAVEPOINT Permite hacer un rollback a la marca de savepoint
ROLLBACK Descarta todos los cambios pendientes de los datos
Insertar nuevas filas en las tablas

Se puede agregar una nueva fila a una tabla por medio del comando INSERT

INSERT INTO tabla [ (columna [, columna...] ) ]


VALUES (valor [, valor...] );

tabla es el nombre de la tabla


columna es el nombre de la columna en la tabla a completar
valor es el valor correspondiente para esa columna.

Nota: este comando con la cláusula VALUES inserta únicamente


una fila por vez en la tabla.

Insertar una nueva oficina en la tabla OFICINAS_VTAS.


SQL> INSERT INTO oficinas_vtas
2 VALUES ( 6, ‘GOLOSINAS SUC. FORMOSA’,
3 ‘S. MARIGHETTI 3021’,‘NDI‘, NULL, NULL, 3600, 1, NULL);
Agregar filas con subconsultas

Se puede usar la sentencia INSERT para agregar filas a una tabla donde
los valores se derivan de otras tablas ya existentes.
En lugar de la cláusula VALUES, se usa una subconsulta.

INSERT INTO tabla [ (columna [, columna...] ) ] subconsulta;

tabla es el nombre de la tabla.


columna es el nombre de la columna de la tabla a completar.
Subconsulta es la subconsulta que devuelve las filas para anexarlas a tabla.

Copiar las filas seleccionadas de la tabla VENDEDORES a la tabla


HISTORIA_VTAS
SQL>INSERT INTOhistoria_vtas (id_vend, fecha_copia, cuota_vtas, ventas)
2 SELECT id_vend, SYSDATE, cuota_vtas, ventas
3 FROM vendedores;

El número de columnas en la lista de la cláusula INSERT debe


coincidir con el número de valores en la subconsulta.
Actualizar Filas

Se pueden modificar filas existentes en una tabla usando el comando UPDATE

UPDATE tabla
SET columna = valor [, columna = valor ...]
[WHERE condición];

tabla es el nombre de la tabla.


columna es el nombre de la columna de la tabla a completar.
valor es el correspondiente valor o subconsulta para la columna.
condición identifica las filas a ser actualizadas y está compuesto por
nombres de columnas, expresiones, constantes, subconsultas y
operadores de comparación.
Actualizar Filas

Nota: es conveniente usar la clave primaria para identificar a una fila en


particular. El uso de otras columnas puede causar que se actualicen
varias filas. Identificar a una fila en la tabla VENDEDORES por la columna
APELLIDOS es peligroso porque varios empleados pueden tener el mismo.

Transferir el vendedor 17 a la oficina 1 y actualizar la identificación


del empleado al cual responderá para que dependa directamente del
responsable de esa oficina de ventas

SQL> UPDATE vendedores


2 SET id_oficina = 1,
3 id_vend_responde_a =
4 (SELECT id_vend
5 FROM oficinas_vtas
6 WHERE id_oficina = 1)
7 WHERE id_vend = 17;
Eliminar Filas

Se pueden eliminar filas usando el comando DELETE.


DELETE [FROM] tabla
[WHERE condición];

tabla es el nombre de la tabla.


condición identifica las filas a ser eliminadas y se compone
de nombres de columnas, expresiones, constantes,
subconsultas y operadores de comparación.

Eliminar toda la información acerca de la oficina 6

SQL> DELETE FROM oficinas_vtas


2 WHERE id_oficina = 6;

Si se omite la cláusula WHERE, se eliminarán todas las filas de la tabla, pero


la tabla aún existe como tal

You might also like