Sie sind auf Seite 1von 5

UNIDAD III LENGUAJE DE MANUPULACION DE DATOS

3.1 Insercin, eliminacin y modificacin de registros.


INSERT
La sentencia INSERT permite agregar nuevas filas de datos a las tablas existentes. Est sentencia tiene como sintaxis genrica.

INSERT INTO tabla_o_vista [(lista_de_columnas)] VALUES (lista_de_valores_de_datos)

Para insertar datos en una relacin, se especfica la tupla que se desea insertar o se formula una consulta cuyo resultado sea el conjunto de tuplas que se desea insertar. Obviamente, los valores de los atributos de las tuplas que se inserten deben pertenecer al dominio de los atributos. De igual modo, las tuplas insertadas deben ser de la aridad -nmero de atributos- correcta. Considere el siguiente Diagrama Entidad Relacin y su correspondiente script Oracle. Considere el siguiente Diagrama Entidad Relacin y su correspondiente script Oracle

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27

CREATE TABLE departamento ( idDepartamento NUMBER(3), nombre CHAR(15) NOT NULL, ciudad CHAR(10) NOT NULL, CONSTRAINT DOM_Ciudad CHECK (ciudad IN ('Veracruz', 'Xalapa', 'Orizaba', 'Regional')), CONSTRAINT PK_Departamento PRIMARY KEY (idDepartamento) ); CREATE TABLE empleado( idEmpleado NUMBER(3), rfc CHAR(14), nombreEmpleado CHAR(40) NOT NULL, oficio CHAR(11) NOT NULL, cargo CHAR(15) NOT NULL, jefe NUMBER(3), ingreso DATE NOT NULL, salario NUMBER(10,2), comision NUMBER(10,2), idDepartamento NUMBER(3) NOT NULL, CONSTRAINT DOM_Empleado_Salario CHECK ( salario > 0 ), CONSTRAINT PK_Empleado PRIMARY KEY (idEmpleado), CONSTRAINT AK_Empleado UNIQUE (rfc), CONSTRAINT FK_Empleado_Jefe FOREIGN KEY (jefe) REFERENCES Empleado, CONSTRAINT FK_Empleado FOREIGN KEY (idDepartamento) REFERENCES Departamento, CONSTRAINT DOM_Empleado_NombreEmpleado CHECK (nombreEmpleado = NLS_UPPER(nombreEmpleado)) );

Considere los siguientes datos

Tabla: Departamento idDepartamento Departamento Ciudad 1 2 3 4 5 6 Ventas Ventas Cobranza Cobranza Credito Credito Veracruz Xalapa Veracruz Xalapa Orizaba Veracruz

Credito

Xalapa

Un formato posible es:

INSERT INTO nombre-tabla VALUES (serie de valores);

El orden en el que se asignen los valores en la clusula VALUES tiene que coincidir con el orden en que se definieron las columnas en la creacin del objeto tabla, dado que los valores se asignan por posicionamiento relativo.

Por ejemplo: INSERT INSERT INSERT INSERT INSERT INSERT INSERT INTO INTO INTO INTO INTO INTO INTO departamento departamento departamento departamento departamento departamento departamento VALUES VALUES VALUES VALUES VALUES VALUES VALUES (1,'Ventas','Veracruz'); (2,'Ventas','Xalapa'); (3,'Cobranza','Veracruz'); (4,'Cobranza','Xalapa'); (5,'Credito','Orizaba'); (6,'Credito','Veracruz'); (7,'Credito','Xalapa');

Otra forma de usar la sentecia INSERT es: INSERT INTO nombre-tabla (columna1, columna2...) VALUES (valor1, valor2...);

En este caso los valores se asignarn a cada una de las columnas mencionadas por posicionamiento relativo.

Es necesario que por lo menos se asignen valores a todas aquellas columnas que no admiten valores nulos en la tabla (NOT NULL).

Por ejemplo: INSERT INTO empleado (idempleado, rfc, nombreempleado, oficio, cargo, jefe, ingreso, salario, comision, idDepartamento)

VALUES (12, 'ROTL790411FRT', 'ROMERO TERRENOS, LUIS', 'Ingeniero', 'Director', NULL, '01/01/2006', 7000, 0.2, 4);

Insertar mediante un SELECT

CREATE GLOBAL TEMPORARY TABLE detalle ( rfc CHAR(14) PRIMARY KEY, nombreEmpleado CHAR(40) NOT NULL, salarioNeto NUMBER(10,2) ) ON COMMIT PRESERVE ROWS; INSERT INTO detalle SELECT rfc, nombreEmpleado, salario + salario*comision FROM empleado WHERE comision > 0;

DELETE (Oracle y MySQL)


Borrar todas las filas que cumplan la condicin especificada en la clusula WHERE. Si esta clusula se omite, se borrarn todas las filas de la tabla. DELETE borra todas las filas de una tabla, pero no la definicin de la tabla del diccionario. Esta es una diferencia con la sentencia DROPTABLE, que elimina el contenido de la tabla y la definicin de la misma. La sintaxis es la que sigue: DELETE FROM tabla [WHERE condicin]; Obsrvese que cada comando DELETE slo opera sobre una relacin. Si se desea borrar tuplas de varias relaciones es necesario utilizar una orden DELETE por cada relacin. La consulta DELETE FROM empleados; Borra todas las tuplas de la tabla empleados La consulta DELETE FROM empleados WHERE cargo = 'Chofer'; Borra los empleados con cargo de chofer Cuando trabajemos con la sentencia DELETE debemos tener en cuenta las siguientes consideraciones:

Solo podemos borrar datos de una nica tabla. Cuando borramos datos de una vista, los estamos borrando tambin de la tabla. Las vistas son solo una forma de ver los datos, no una copia. Si intentamos borrar un registro de una tabla referenciada por una FOREING KEY como tabla maestra, si la tabla dependiente tiene registros relacionados la

sentencia DELETE fallar a no ser que la tabla hija contenga la sentencia ON DELETE CASCADE..

TRUNCATE

TRUNCATE es una mejor alternativa a DELETE cuando se desea borrar todo el


contenido de la tabla. La sintaxis es:

TRUNCATE TABLE nombre_tabla;

Eliminar registros con la sentencia TRUNCATE es ms rpido que con la sentencia DELETE, especialmente cuando la tabla tiene numerosos disparadores, ndices y otras dependencias como por ejemplo integridad referencial. La sentencia TRUNCATE no es transaccional. No se puede deshacer (ROLL BACK) y ocurre un error en casos de bloqueo de tabla. la tabla puede recrearse como una vaca con TRUNCATE TABLE, incluso si los archivos de datos o de ndice se han corrompido En MySQL el manejador de tablas reinicia el valor AUTO_INCREMENT usado. Esto es cierto incluso para MyISAM y InnoDB