" EDUCA " OLIVARAES CARRASCO DIEGO EMILIO CARDOSO PICHARDO DAVID

Anuncio
CREACIÓN DE LA BASE DE DATOS
OLIVARAES CARRASCO DIEGO EMILIO
CARDOSO PICHARDO DAVID
NOMBRE DE LA BASE DE DATOS
" EDUCA "
Problemática A RESOLVER
Se va a presentar el diseño de una base de datos, cuyas tablas se refieren a los cursos que
van a ser impartidos en distintas clases en un centro educativo por varios profesores
pertenecientes a diversos departamentos y en el que se matricularan distintos estudiantes .
En el centro educativo también existe personal no docente.
TABLAS PRIMERA, SEGUNDA Y TERCERA FORMA NORMAL
CURSO
CNO
CNOMBRE CDESCP
CRED
CTARIFA
CDEPTO
CNO = NUMERO DE CURSO
CNOMBRE= NOMBRE DEL CURSO
CDESCP= DESCRIPCION DEL CURSO
CRED= CREDITOS QUE VALE EL CURSO
CTARIFA= VALOR TARIFA LABORATORIO
CDEPT= NOMBRE ID DEPARTAMENTO QUE DA EL CURSO
DEPARTAMENTO
DEPT
DEDIF
DDESPACHO DCHFNO
DEPT= NOMBRE ID DEPARTAMENTO
DEDIF= EDIFICIO
DDESPACHO= DESPACHO
DCHFNO= DIRECTOR
CLASE
CNO
SEC
CINSTRFNO CDIA
CHORA
CEDIF
CDESPACHO
CNO= NUMERO DE CURSO
SEC= NUMERO DE SECCION
CINSTRFNO= NUMERO DE PROFESOR
CDIA= DIA DE LA SEMANA
CHORA=HO= SALA DE LA CLASE HORA DE LA CLASE
CEDIF= EDIFICIO DE LA CLASE
CDESPACHO= SALA DE CLASE
MATRICULA
CNO
SEC
SNO
FEC_MAT
HORA_MAT
CNO= NUMERO DE CURSO
SEC= NUMERO DE SECCION
SNO= NUMERO DE ESTUDIANTE
FEC_MAT= FECHA DE MATRICULACION
HORA_MAT= HORA DE MATRICULACION
ESTUDIANTE
SNO
SNOMBRE SDOMI
STLFNO SFNACIM SIQ
SNO= NUMERO DE ESTUDIANTE
SNOMBRE= NOMBRE DE ESTUDIANTE
SDOMI= DOMICILIO
STLFNO= TELEFONO
SFNACIM= FECHA DE NACIMIENTO
SIQ= NUMERO ID. CENTRO
SADVFNO= NUMERO ID. DEPARTAMENTO
SESP= NOMBRE ID DEPARTAMENTO
SADVFNO SESP
CLAUSTRO
FNO
FNOMBRE FDOMI
FFCANTI
FNUMDEP FSUELDO FDEP
FNO= NUMERO DE PROFESOR
FNOMBRE= NOMBRE DE PROFESOR
FDOMI= DOMICILIO DEL PROFESOR
FFCANTI= FECHA CONTRATACION
FNUMDEP= NUMERO DE DEPARTAMENTO
FSUELDO= SUELDO
FDEP= NOMBRE ID. DEPARTAMENTO
CODIGO
---------
phpMyAdmin SQL Dump
version 3.3.9
http://www.phpmyadmin.net
Servidor: localhost
Tiempo de generación: 06-07-2011 a las 03:26:31
Versión del servidor: 5.5.8
Versión de PHP: 5.3.5
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
/*!40101
*/;
/*!40101
*/;
/*!40101
*/;
/*!40101
SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT
SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS
SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION
SET NAMES utf8 */;
--- Base de datos: `educa`
-CREATE DATABASE EDUCA;
--- Estructura de tabla para la tabla `clase`
-CREATE DATABASE EDUCA;
CREATE TABLE IF NOT EXISTS `clase` (
`Cno` char(3) NOT NULL,
`Sec` char(2) NOT NULL,
`Cinstrfno` char(2) NOT NULL,
`Cdia` char(2) NOT NULL,
`Chora` char(14) NOT NULL,
`Cedif` char(2) NOT NULL,
`Cdespacho` int(11) NOT NULL,
PRIMARY KEY (`Cno`,`Sec`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Volcar la base de datos para la tabla `clase`
-INSERT INTO `clase` (`Cno`, `Sec`, `Cinstrfno`, `Cdia`, `Chora`,
`Cedif`, `Cdespacho`) VALUES
('C11', '01', '08', 'LU', '08:00-09:00 AM', 'SC', 305),
('C11', '02', '08', 'MA', '08:00-09:00 AM', 'SC', 306),
('C33', '01', '80', 'MI', '09:00-10:00 AM', 'SC', 305),
('C55', '01', '85', 'JU', '11:00-12:00 AM', 'HU', 306),
('P11', '01', '06', 'JU', '09:00-10:00 AM', 'HU', 102),
('P33', '01', '06', 'VI', '11:00-12:00 AM', 'HU', 201),
('T11', '01', '10', 'LU', '10:00-11:00 AM', 'HU', 101),
('T11', '02', '65', 'LU', '10:00-11:00 AM', 'HU', 102),
('T33', '01', '65', 'MI', '11:00-12:00 AM', 'HU', 101);
-- ---------------------------------------------------------- Estructura de tabla para la tabla `claustro`
-CREATE TABLE IF NOT EXISTS `claustro` (
`Fno` char(3) NOT NULL,
`Fnombre` char(15) NOT NULL,
`Fdomi` char(20) NOT NULL,
`Ffcanti` date NOT NULL,
`Fnumdep` int(11) DEFAULT NULL,
`Fsueldo` decimal(10,0) NOT NULL,
`Fdept` char(4) NOT NULL,
PRIMARY KEY (`Fno`),
KEY `Fdept` (`Fdept`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Volcar la base de datos para la tabla `claustro`
-INSERT INTO `claustro` (`Fno`, `Fnombre`, `Fdomi`, `Ffcanti`,
`Fnumdep`, `Fsueldo`, `Fdept`) VALUES
('06', 'KATHY PEPE', 'CALLE LA PIEDA, 7', '1979-01-15', 2,
'35000', 'PHIL'),
('08', 'JOSE COHN', 'AP. CORREO 1138', '1979-07-09', 2, '35000',
'CIS'),
('10', 'JESSIE MARTIN', 'Dr. DEL ESTE, 4', '1969-09-01', 2,
'45000', 'THEO'),
('60', 'JULIA MARTIN', 'Dr, DEL ESTE, 4', '1969-09-01', 1,
'45000', 'PHIL'),
('65', 'LISA BOBAK', 'CAMINO RISA, 77', '1981-09-06', 0,
'36000', 'THEO'),
('80', 'BARB HLAVAY', 'CALLE DEL SUR, 489', '1982-01-16', 3,
'35000', 'CIS'),
('85', 'AL HARTLEY', 'CALLE DE LA PLATA', '1979-09-05', 7,
'45000', 'CIS');
-- ---------------------------------------------------------- Estructura de tabla para la tabla `curso`
-CREATE TABLE IF NOT EXISTS `curso` (
`Cno` char(3) NOT NULL,
`Cnombre` char(22) NOT NULL,
`Cdescp` char(25) NOT NULL,
`Cred` int(11) NOT NULL,
`Ctarifa` decimal(10,0) NOT NULL,
`Cdept` char(4) NOT NULL,
PRIMARY KEY (`Cno`),
KEY `Cdept` (`Cdept`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Volcar la base de datos para la tabla `curso`
-INSERT INTO `curso` (`Cno`, `Cnombre`, `Cdescp`, `Cred`,
`Ctarifa`, `Cdept`) VALUES
('C11', 'INTROD. A LAS CC.', 'PARA NOVATOS', 3, '100', 'CIS'),
('C22', 'ESTRUCT. DE DATOS', 'MUY UTIL', 3, '50', 'CIS'),
('C33', 'MATEMATICAS DISCRETAS', 'ABSOLUTAMENTE NECESARIO', 3,
'0', 'CIS'),
('C44', 'CIRCUITOS DIGITALES', '!AH HA!', 3, '0', 'CIS'),
('C55', 'ARQUITECT. COMPUTADOR', 'MAQ. VON NEWMAN', 3, '100',
'CIS'),
('C66', 'BASES DE DATOS RELAC.', 'IMPRESCINDIBLE', 3, '500',
'CIS'),
('P11', 'EMPIRISMO', 'VERLO PARA CREERLO', 3, '100', 'PHIL'),
('P22', 'RACIONALISMO', 'PARA USAR LOS CIS', 3, '50', 'PHIL'),
('P33', 'EXISTENCIALISMO', 'PARA USAR LOS CIS', 3, '200',
'PHIL'),
('P44', 'SOLIPSISMO', 'PARA MI MISMO', 6, '0', 'PHIL'),
('T11', 'ESCOLASTICISMO', 'PARA BEATOS', 3, '150', 'THEO'),
('T22', 'FUNDAMENTALISMO', 'PARA DESCUIDADOS', 3, '90', 'THEO'),
('T33', 'HEDONISMO', 'PARA SANOS', 3, '0', 'THEO'),
('T44', 'COMUNISMO', 'PARA AVAROS', 6, '200', 'THEO');
-- ---------------------------------------------------------- Estructura de tabla para la tabla `departamento`
--
CREATE TABLE IF NOT EXISTS `departamento` (
`Dept` char(4) NOT NULL,
`Dedif` char(2) NOT NULL,
`Ddespacho` int(11) NOT NULL,
`Dchfno` char(3) DEFAULT NULL,
PRIMARY KEY (`Dept`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Volcar la base de datos para la tabla `departamento`
-INSERT INTO `departamento` (`Dept`, `Dedif`, `Ddespacho`,
`Dchfno`) VALUES
('CIS', 'SC', 300, '80'),
('D.G', 'SC', 100, NULL),
('PHIL', 'HU', 100, '60'),
('THEO', 'HU', 200, '10');
-- ---------------------------------------------------------- Estructura de tabla para la tabla `estudiante`
-CREATE TABLE IF NOT EXISTS `estudiante` (
`Sno` char(3) NOT NULL,
`Snombre` char(30) NOT NULL,
`Sdomi` char(15) NOT NULL,
`Stlfno` char(12) NOT NULL,
`Sfnacim` char(6) NOT NULL,
`Siq` int(11) NOT NULL,
`Sadvfano` char(3) NOT NULL,
`Sesp` char(4) NOT NULL,
PRIMARY KEY (`Sno`),
KEY `Sesp` (`Sesp`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Volcar la base de datos para la tabla `estudiante`
-INSERT INTO `estudiante` (`Sno`, `Snombre`, `Sdomi`, `Stlfno`,
`Sfnacim`, `Siq`, `Sadvfano`, `Sesp`) VALUES
('100', 'MOE DUBAY', 'CONNECTICUT', '203-123-4567', '780517',
120, '10', 'THEO'),
('150', 'LARRY DUBAY', 'CONNECTICUT', '203-123-4567', '780517',
121, '80', 'CIS'),
('325', 'CURLEY DUBAY', 'CONNECTICUT', '203-123-4567', '780517',
122, '10', 'THEO'),
('800', 'ROCKY BALBOA', 'PENSYLVANIA', '112-112-1122', '461004',
99, '60', 'PHIL');
-- --------------------------------------------------------
--- Estructura de tabla para la tabla `matricula`
-CREATE TABLE IF NOT EXISTS `matricula` (
`Cno` char(3) NOT NULL,
`Sec` char(2) NOT NULL,
`Sno` char(3) NOT NULL,
`Fechamat` date NOT NULL,
`Horamat` char(10) NOT NULL,
PRIMARY KEY (`Cno`,`Sec`,`Sno`),
KEY `Sno` (`Sno`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Volcar la base de datos para la tabla `matricula`
-INSERT INTO `matricula` (`Cno`, `Sec`, `Sno`, `Fechamat`,
`Horamat`) VALUES
('C11', '01', '325', '1987-01-04', '09.41.30'),
('c11', '01', '800', '1987-12-15', '11.49.00'),
('C11', '02', '100', '1987-12-17', '09.32.00'),
('c11', '02', '150', '1987-12-17', '09.32.30'),
('P33', '01', '100', '1987-12-23', '11.30.00'),
('P33', '01', '800', '1987-12-23', '11.23.00'),
('T11', '01', '100', '1987-12-23', '11.21.00'),
('T11', '01', '150', '1987-12-15', '11.35.30'),
('T11', '01', '800', '1987-12-15', '14.00.00');
-- ---------------------------------------------------------- Estructura de tabla para la tabla `personal`
-CREATE TABLE IF NOT EXISTS `personal` (
`Enombre` char(15) NOT NULL,
`Cargo` char(10) NOT NULL,
`Esueldo` int(11) NOT NULL,
`Dept` char(4) DEFAULT NULL,
PRIMARY KEY (`Enombre`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
--- Volcar la base de datos para la tabla `personal`
-INSERT INTO `personal` (`Enombre`, `Cargo`, `Esueldo`, `Dept`)
VALUES
('ARQUIMEDES', 'AYTE.LAB', 200, 'ENG'),
('DAVINCI', 'AYTE.LAB', 500, NULL),
('DICK NIX', 'LADRON', 25001, 'PHIL'),
('EUCLIDES', 'AYTE.LAB', 1000, 'MATH'),
('HANK KISS', 'BUFON', 25000, 'PHIL'),
('JUAN', 'EVANG4', 54, 'THEO'),
('LUCAS', 'EVANG1', 53, 'THEO'),
('MARCOS', 'EVANG2', 52, 'THEO'),
('MATEO', 'EVANG3', 51, 'THEO');
--- Filtros para las tablas descargadas (dump)
---- Filtros para la tabla `clase`
-ALTER TABLE `clase`
ADD CONSTRAINT `clase_ibfk_1` FOREIGN KEY (`Cno`) REFERENCES
`curso` (`Cno`);
--- Filtros para la tabla `claustro`
-ALTER TABLE `claustro`
ADD CONSTRAINT `claustro_ibfk_1` FOREIGN KEY (`Fdept`)
REFERENCES `departamento` (`Dept`);
--- Filtros para la tabla `curso`
-ALTER TABLE `curso`
ADD CONSTRAINT `curso_ibfk_1` FOREIGN KEY (`Cdept`) REFERENCES
`departamento` (`Dept`);
--- Filtros para la tabla `estudiante`
-ALTER TABLE `estudiante`
ADD CONSTRAINT `estudiante_ibfk_1` FOREIGN KEY (`Sesp`)
REFERENCES `departamento` (`Dept`);
--- Filtros para la tabla `matricula`
-ALTER TABLE `matricula`
ADD CONSTRAINT `matricula_ibfk_1` FOREIGN KEY (`Sno`)
REFERENCES `estudiante` (`Sno`);
PASOS DE INSTALACION DEL SERVIDOR DE SU ELECCION PARA MYSQL
Tutorial de instalación de WampServer
En esta ocasión instalaremos unos de los programas que nos permitirán
crear un servidor en nuestra casa sin necesidad de tener una conexión de internet en nuestra pc. Éste
servidor casero nos servirá para poder probar y evaluar nuestros proyectos a crear.Para poder instalarlo
procederemos a visitar la pagina web del WampServer y descargar su ultima versión, lo podrás encontrar
en el siguiente enlace de su pagina oficial:http://www.wampserver.com/
Aquí como vemos en la página oficial busacamos donde dice versión courante y hacemos clicK en
WampServer.
Busamos la opcion telecharger WampServer y hacemos clicK en esta para descargar el programa.
Nos aparecera una pantalla que nos permitirá descargarlo y lo guardamos en el lugar deseado.
Ya descargado lo ejecutamos en nuestra computadora.
Aquí observamos el mensaje de bienvenida y le damos clicK en next para continuar la instalación.
Aceptamos el contrato de licencia y le damos clicK en next.
Nos aparecerá la ubicación donde se realizara nuestra instalación c:\wamp que es por defecto y le damos
clicK next.
Dejamos seleccionados las 2 opciones ya que nos crearan un acceso directo en el escritorio y un acceso
directo en la barra de inicio, le damos clicK en next.
Hacemos clicK en install.
Observamos que se instala.
Luego nos aparece una pantalla que nos indica que la instalación ha finalizado y una opción que nos
permite que ejecutemos el WampServer por primera vez, lo dejamos seleccionado y hacemos clicK en
finish.
Aquí donde indica la flecha está el icono de inicio rápido del WampServer que será de gran utilidad.
Al hacer clicK en el icono vemos el menú del WampServer que nos será muy útil para hacer nuestro
proyecto.
CONSULTAS DDM Y DDL
INSERT
INSERT INTO `educa`.`clase` (`Cno`, `Sec`, `Cinstrfno`, `Cdia`, `Chora`, `Cedif`,
`Cdespacho`) VALUES ('C44', '01', '80', 'LU', '10:00-11:00 AM', 'SC', '201');
SELECT
SELECT*
FROM`claustro`
WHERE 1
LIMIT 0 , 30
SELECT Fnombre
FROM`claustro`
WHERE 1
LIMIT 0 , 30
SELECT Fnombre
FROM`claustro`
WHERE Fnombre ='JOSE COHN'
LIMIT 0 , 30
Diccionario de consultas**
Insertar datos.
Hasta ahora hemos visto como se almacenan los datos en una base de datos y como consultar
esos datos almacenados, pero no hemos visto como almacenar dichos datos. Para almacenar
datos en una base de datos debemos insertar filas en las tablas. Para ellos SQL pone a
nuestra disposición la sentencia INSERT.
Inserción de filas
El proceso de inserción de filas consiste en añadir a una tabla una o más filas y en cada fila
todos o parte de sus campos.
Podemos distinguir dos formas de insertar filas: Inserción individual de filas. Inserción multiple
de filas.
La sintaxis de la sentencia INSERT es diferente según cual sea nuestro propósito.Sólo
podremos omitir un campo al efectuar una inserción cuando este acepte valores nulos.
Inserción individual de filas
Para realizar la inserción individual de filas SQL posee la instrucción INSERT INTO. La
inserción individual de filas es la que más comúnmente utilizaremos. Su sintaxis es la siguiente:
INSERT INTO <nombre_tabla> [(<campo1>[,<campo2>,...])] values (<valor1>,<valor2>,...);
Como se puede observar la sentencia tiene dos partes claramente diferenciadas, por un lado la
propia INSERT INTO seguida de la lista de campos en los que queremos insertar los datos, y
por otro la lista de valores que queremos insertar en los campos. La mejor forma de ver esto es
a través de un ejemplo. INSERT INTO tCoches (matricula, marca , modelo , color ,
numero_kilometros) values ('M1111CA', 'RENAULT', 'MEGANE TR100', 'NEGRO DIAMANTE',
78000);
Nota:Hemos utilizado el color rojo para los datos de tipo texto, entrecomillados con la comilla
simple, y el azul para los numericos.
Con esta sentencia INSERT creamos un registro en la tabla tCoches con los valores
especificados, es decir, la matricula tendrá el valor M-1111-CA, la marca será RENAULT y así
sucesivamente.¿Que ocurriría si ya existiera un coche con la matricula M-1111-CA? Se
producirá un error, porque hemos definido la clave primaria en el campo matricula, y como
hemos visto la clave primaria debe ser única.
Si omitimos algún par " campo-valor " en la sentencia INSERT, pueden ocurrir varias cosas:
Que se produzca un error, si el campo no acepta valores nulos. Que se grave el registro y se
deje nulo el campo, cuando el campo acepte valores nulos. Que se grave el registro y se tome
el valor por defecto, cuando el campo tenga definido un valor por defecto. Que hacer en cada
cada momento dependerá del programa.
Por ejemplo, la siguiente sentencia creará un registro en la tabla tCoches con el campo
numero_kilometros cero, ya que este es su valor por defecto. INSERT INTO tCoches
(matricula, marca , modelo , color) values ('M1111CA', 'RENAULT', 'MEGANE TR100', 'NEGRO
DIAMANTE');
Inserción multiple de filas
La sentencia INSERT permite tambien insertar varios registros en una tabla. Pare ello se utiliza
una combinación de la sentencia INSERT junto a una sentencia SELECT. El resultado es que
se insertan todos los registros devueltos por la consulta.
INSERT INTO <nombre_tabla> [(<campo1>[,<campo2>,...])] SELECT
[(<campo1>[,<campo2>,...])]
FROM <nombre_tabla_origen>;
Para poder utilizar la inserción multiple de filas se deben cumplir las siguientes normas: La lista
de campos de las sentencias insert y select deben coincidir en número y tipo de datos. Ninguna
de las filas devueltas por la consulta debe infringir las reglas de integridad de la tabla en la que
vayamos a realizar la inserción.
Pongamos un ejemplo, vamos a crear una tabla con las diferentes marcas que tenemos en la
base de datos. La sentencia SQL para crear la tabla es la siguiente: CREATE TABLE tMarcas (
codigo integer not null identity(1,1), marca varchar(255), constraint PK_Marcas primary key
(codigo) ); Nota: Hemos incluido la función identity para el campo codigo, esta función es propia
de SQL Server e indica que el código se genera automáticamente cada vez que se inserta un
registro con un valor autonumérico. Praticamente todos los gestores de bases de datos dan la
opción del campo autonumerico o incremental, si bien el modo varias. Para SQL Server
utilizaremos la funcion identity, para ORACLE las secuencias ...
Una vez que tenemos creada la tabla de marcas vamos a insetar otro par de registros en la
tabla de coches, para ello utilizamos una sentencia insert into para una única fila. INSERT
INTO tCoches (matricula, marca , modelo , color) values ('M2233FH', 'SEAT', 'LEON FR',
'ROJO'); INSERT INTO tCoches (matricula, marca , modelo , color) values ('M1332FY', 'FORD',
'FIESTA', 'GRIS PLATA');
Ahora tenemos tres marcas diferentes en la tabla Coches, y queremos insertarlas en la tabla de
marcas, para ello podemos realizar tres inserciones individuales, pero ¿que pasaría si no
supiéramos de antemano el número de marcas?¿y si fueran unas cincuenta marcas?. Nos
podriamos pasar el día entero escribiendo sentencias insert into.
Afortunadamente podemos realizar una inserción multiple del siguiente modo: INSERT INTO
tMarcas (marca) SELECT DISTINCT marca FROM tCoches;
Como resultado obtenemos un registro en la tabla tMarcas por cada marca de la tabla tCoches.
El campo codigo se ha generado automáticamente ya que está definido como identidad.
CODIGO MARCA 1 FORD 2 RENAULT 3 SEAT
Demonos cuenta de que el orden de generación no ha sido el mismo que el de inserción, sino
que se ha aplicado el orden en el que han sido devueltos los datos por la sentencia SELECT.
Ahora deberiamos cambiar los datos de la tabla tCoches, para guardar el código de la marca
en lugar de su descripción, pero para ello necesitamos saber como modificar un dato grabado
... Es momento de pasar al siguiente punto, la actualización de datos.
Borrado de datos.
La sentencia DELETE.
Para borrar datos de una tabla, debemos utilizar la sentencia DELETE.
La sintaxis de la sentencia DELETE es la siguiente: DELETE FROM <nombre_tabla> [ WHERE
<condicion>];
El siguiente ejemplo ilustra el uso de la sentencia DELETE. Es buena idea especificar en la
sentencia WHERElos campos que forman la clave primaria de la tabla para evitar borrar datos
que no queramos eliminar. DELETE FROM tCoches WHERE marca = 'SEAT'; La sintaxis de
DELETE varia en Access, siendo necesario el uso del comodín *. DELETE * FROM <tCoches>
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 también 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á.
La sentencia TRUNCATE
Para realizar un borrado completo de tabla debemos considerar la posibilidad de utilizar la
sentencia TRUNCATE, mucho más rápida que DELETE.
La sintaxis de la sentencia TRUNCATE es la siguiente: TRUNCATE TABLE <nombre_tabla>;
El siguiente ejemplo muestra el uso de la sentencia TRUNCATE. TRUNCATE TABLE tCoches;
Cuando trabajemos con la sentencia TRUNCATE debemos tener en cuenta las siguientes
consideraciones. La sentencia TRUNCATE no es transaccional. No se puede deshacer. La
sentencia TRUNCATE no admite clausula WHERE. Borra toda la tabla. No todos los gestores
de bases de datos admiten la sentencia TRUNCATE.
Actualización de datos.
La sentencia UPDATE.
Para la actualización de datos SQL dispone de la sentencia UPDATE. La sentencia UPDATE
permite la actualización de uno o varios registros de una única tabla. La sintaxis de la sentencia
UPDATE es la siguiente UPDATE <nombre_tabla> SET <campo1>
<valor1> {[,<campo2>
<valor2>,...,<campoN> = <valorN>]} [ WHERE <condicion>];
Las siguientes sentencias actualizan los datos de la tabla tCoches con los valores de la tabla
tMarca obtenidos anteriormente en la página dedicada a la inserción de datos. UPDATE
tCoches SET marca = '1' WHERE marca = 'FORD'; UPDATE tCoches SET marca = '2' WHERE
marca = 'RENAULT'; UPDATE tCoches SET marca = '3' WHERE marca = 'SEAT';
No tese que los valores para el campo marca aparecen entrecomillados, ya que es un campo
de tipovarchar. Los valores con los que actualicemos los datos deben ser del tipo del campo.
Un aspecto a tener en cuenta es que los campos que forman la primary key de una tabla sólo
se podrán modificar si los registros no están referenciados en ninguna otra tabla. En nuestro
caso sólo podremos modificar la matrícula de un coche si no tiene registros asociados en la
tabla tAlquileres.
Esto puede causar poblemas, ya que podríamos habernos equivocado al dar de alta el coche
en la tabla tCoches y detectar el error despues de alquilar el coche. En tal caso tendríamos dar
de alta un nuevo coche con la matrícula correcta, actualizar los registros de la tabla alquileres y
por último borrar el registro erroneo de la tabla tCoches. Este proceso puede ser bastante
complicado en el caso de que existiran más relaciones con la tabla. Se podría considerar que la
clave primaria de la tabla esta mal definida y que la matrícula no debe ser el elemento que
identifique el coche. Una alternativa seria crear un código autonumérico para la tabla tCoches
que realizará las veces de clave primaria y crear un índice único para la matrícula, este diseño
tambien
tiene sus "pegas", por lo que debemos decidir que modelo utilizar, y seleccionar las claves
primarias con sumo cuidado.
Uso de subconsultas con UPDATE
El uso de subconsultas es una técnica avanzada de consulta que veremos con detalle más
adelante, pero que tratamos aquí de forma introductoria.
Hasta ahora hemos actualizado los datos con valores que conocemos de antemano, ¿pero qué
ocurre cuando esos datos deben tomarse de otra tabla de la base de datos?.Podríamos
diseñar un programa que recorriera toda la tabla y buscará el valor adecuado para cada
registro y lo actualizase. Sin duda es una solución, y en ocasiones casí la única, pero es una
solución cara y compleja que además exige que conozcamos algún otro lenguaje de
programación. Para estos casos podemos utilizar subconsultas con la sentencia UPDATE.
La sintaxis es la siguiente: UPDATE <nombre_tabla> SET <campo1>
<valor1> | <subconsulta1> {[,<campo2>
<valor2> | <subconsulta2> ,... , <campoN> = <valorN> | <subconsultaN>]} [ WHERE
<condicion>];
Como puede verse la sintaxis es practicamente igual a la sintaxis del la sentencia UPDATE,
con la salvedad de que podemos utilizar subconsultas en lugar de valores al asignar los
campos. De forma generica podemos decir que las subconsultas son consultas SELECT
incluidas dentro de otra sentencia SQL.
Las siguientes sentencias UPDATE son equivalentes: Utilizando sentencias UPDATE
normales: UPDATE tCoches SET marca = '1' WHERE marca = 'FORD'; UPDATE tCoches SET
marca = '2' WHERE marca = 'RENAULT'; UPDATE tCoches SET marca = '3' WHERE marca =
'SEAT'; Utilizando sentencias UPDATE combinadas con subconsultas: UPDATE tCoches SET
marca = (SELECT CODIGO FROM tMarcas WHERE tMarcas.Marca = tCoches.Marca )
WHERE marca IN ('FORD','RENAULT','SEAT');
Por cada registro de la tabla tCoches se ejecutará la subconsulta, actualizando el campo marca
a el valor del código de la marca en la tabla tMarcas.
Descargar