You are on page 1of 73

MANIPULACION DE UNA BD

1. 4. ESTABLECER PROCESOS PARA LAMANIPULACIN DE LA BASE DE DATOS El lenguaje de manipulacin de datos (Data Manipulacin Lenguaje DML) es un lenguaje proporcionado por el sistema de gestin de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de consulta o manipulacin de datos organizados por el modelo de datos adecuados. El lenguaje de manipulacin de datos mas popular hoy da es SQL usado para recuperar y manipular datos en una base de datos relacional. Otros ejemplos de DML son los usados por bases 2. 4.1 CREAR EL PROCESO PARA ALTAS DE DATOSEn este lenguaje para conectar bases de datos se utilizan sentencias que realizan un querry (consulta) a la base de datos a fin de que esta les responda con una cantidad de datos limitados segn lo buscado o requerido. Bsicamente existen muchas funciones SQL pero por lo general son cuatro por lo general las mas requeridas o usadas son:Select, Isert; Delete y Update 3. Las bases de datos son soportes capaces de almacenar grandes cantidades de datos usando SQL como el lenguaje consultor, de esos datos adems de poder modificar los, seleccionarlos, borrarlos, editarlos y muchas otras funciones.Existen estructuras de control para cada uno de los procedimientos que se quieran realizar en este caso para dar de alta datos seriaInsert Into:Nombre tabla(Nombre campo) Values(valor,valor,valor) 4. Dentro de estos campos siempre se incluyen el campo Id a fin de identificar con un valor numrico una fila y as poder distinguirla de las dems. 4.2 Establecer el proceso de bajas de datos.Para borrar o dar de baja datos de una tabla debemos utilizar la sentencia DeleteLa sintaxis de la sentencia Delete es la siguiente: Delete From<nombre-tabla>[where<condicion>] 5. El siguiente ejemplo ilustra el uso de la sentencia DELETE. Es buena idea especificar la sentencia where los campos que forman la clave primaria de la tabla para evitar borrar datos que no queramos eliminar.DELETE FROM cochesWHERE marca= seat.Cuando trabajamos con la senteNcia DELETE debemos tener en cuenta las siguientes consideraciones:*Solo podemos borrar datos de una tabla. 6. * Cuando borramos datos de una vista los estamos borrando tambin de la tabla.*Si intentamos borrar un registro de una tabla referenciada por una foreing key como la tabla muestra si la tabla dependiente tiene registros relacionados la sentencia DELETE fallara. 7. 4.3 Realizar el proceso de modificacion de datosSi lo que se quiere hacer es modificar oactualizar el contenido de un campo cuando secumpla un criterio indicando, en lugar derecorrer todas las filas podemos utilizarUPDATE / SET por ejemplo:UPDATE clientes SET Npr = 28WHEREProvincia = Mand 8. Esto har que se asigne un valor 28 al campoNPR de todos los clientes que cumplan lo que Seindican despus de WHERE es decir quecumplan el criterio indicado.Tambin podemos indicar ( despus de SET)varios campos a actualizar, separndolos porcomas:UPDATE clientes SET Npr = 28 patrn = sanIsidro WHERE provincia = madnd 9. Una vez ejecutadas estas instruccionesSQL no se podr deshacer los cambios almenos o estamos trabajando condecordsets DAO o ADO ya que sitrabajamos con ADO. NET esos datossolos se harn permanentes al actualizarfsicamente los datos con el DataAdapter.Otro ejemplo de sintaxis para editar datosde una fila especificar:

10. UPDATE nombre tabla SET nombre campo=valornombre campo valor, nombrecampo = valor WHERE id = numero filaAlgo que siempre debemos recordar es incluirel campo id a fin de identificar con un valornumrico una fila. 11. 4.4 Realizar el proceso de consultas de datos.Esta es la forma mas sencilla y habitual deusar las ordenes SQL. Normalmenteusaremos este tipo de instrucciones paracargar lo datos en una data table (sitrabajamos con ADO METO en unRecordset si trabajamos con ADO O DAO).Por ejemplo:SELECT*FOLOM clientes WHEREprovincia = Madrid 12. Este cdigo SQL selecciona los registrosde la tabla clientes que se residan enMadrid. Los campos que volvern seriantodos ya que hemos indicado despus deSELECT.Si solo queremos que devuelva los datoscontenidos en los campos Nombre,apellidos y NIF hagamos esto:SELECT nombre apellidos NIF formclientes WHERE provincia = Madrid 13. 4.5 establecer el proceso para crear informesLos informes de base de datos estndefinidos por bandas de informe. Estasbandas de informes se definen cinco tiposdiferentes de lneas de informe porejemplo: las cabeceras que aparecen en laparte superior de cada pagina. 14. Cuando se utiliza organizacin de informerpido no es necesario aprender sobre losdiferentes tipos de bandas solo senecesita decir a la base de datos que creeel formato del informe.Se pueden comprobar el aspecto de unformato de informe visualizando enpantalla. Base visualizaron las entradas delos registros en lugar de los patrones. 15. Para crear un informe:*desplazar el subrayado en el panel dedatos del archivo que se requiere uninforme.*pulsar la tecla de informe ( Despl f9)*teclear V para visualizar el informe enpantalla*pulsar la barra de espacio para ver cadapantalla del informe y volver al centro decontrol.

entorno de desarrollo del SGBD.

procedimientos para manipular una base de datos empleando el SGBD.

Identificar el concepto y funcionalidad del SQL.


El lenguaje de consulta estructurado o SQL (por sus siglas en ingls Structured Query Language) es un lenguaje declarativo de acceso abases de datos relacionales que permite especificar diversos tipos de operaciones en ellas. Una de sus caractersticas es el manejo del lgebra y el clculo relacional que permiten efectuar consultas con el fin de recuperar de forma sencilla informacin de inters de bases de datos, as como hacer cambios en ellas.

Funciones de valores simples:


ABS(n)=Devuelve el valor absoluto de (n). CEIL(n)=Obtiene el valor entero inmediatamente superior o igual a "n". FLOOT(n) =Devuelve el valor entero inmediatamente inferior o igual a "n". MOD (m, n)=Devuelve el resto resultante de dividir "m" entre "n". NVL (valor, expresin)=Sustituye un valor nulo por otro valor. POWER (m, exponente)=Calcula la potencia de un numero. ROUND (numero [, m])=Redondea nmeros con el numero de dgitos de precisin

indicados.
SIGN (valor)=Indica el signo del "valor". SQRT(n)=Devuelve la raz cuadrada de "n". TRUNC (numero, [m])=Trunca nmeros para que tengan una cierta cantidad de dgitos

de precisin.
VAIRANCE (valor)=Devuelve la varianza de un conjunto de valores.

Funciones de grupos de valores:

AVG(n)=Calcula el valor medio de "n" ignorando los valores nulos. COUNT (* | Expresin)=Cuenta el numero de veces que la expresin evala algn dato

con valor no nulo. La opcin "*" cuenta todas las filas seleccionadas. MAX (expresin)=Calcula el mximo. MIN (expresin)=Calcula el mnimo. SUM (expresin)=Obtiene la suma de los valores de la expresin. GREATEST (valor1, valor2)=Obtiene el mayor valor de la lista. LEAST (valor1, valor2)=Obtiene el menor valor de la lista. Funciones que devuelven valores de caracteres:
CHR(n) =Devuelve el carcter cuyo valor en binario es equivalente a "n". CONCAT (cad1, cad2)=Devuelve "cad1" concatenada con "cad2". LOWER (cad)=Devuelve la cadena "cad" en minsculas. UPPER (cad)=Devuelve la cadena "cad" en maysculas. INITCAP (cad)=Convierte la cadena "cad" a tipo titulo. LPAD (cad1, n[,cad2])=Aade caracteres a la izquierda de la cadena hasta que tiene

una cierta longitud.


RPAD (cad1, n[,cad2])=Aade caracteres a la derecha de la cadena hasta que tiene

una cierta longitud.


LTRIM (cad [,set])=Suprime un conjunto de caracteres a la izquierda de la cadena. RTRIM (cad [,set])=Suprime un conjunto de caracteres a la derecha de la cadena. REPLACE (cad, cadena_busqueda [, cadena_sustitucion])=Sustituye un carcter o

caracteres de una cadena con 0 o mas caracteres. SUBSTR (cad, m [,n])=Obtiene parte de una cadena. TRANSLATE (cad1, cad2, cad3)=Convierte caracteres de una cadena en caracteres diferentes, segn un plan de sustitucin marcado por el usuario. Funciones que devuelven valores numricos:
ASCII(cad)=Devuelve el valor ASCII de la primera letra de la cadena "cad". INSTR (cad1, cad2 [, comienzo [,m]])=Permite una bsqueda de un conjunto de

caracteres en una cadena pero no suprime ningn carcter despus. LENGTH (cad)=Devuelve el numero de caracteres de cad. Funciones para el manejo de fechas:
SYSDATE=Devuelve la fecha del sistema. ADD_MONTHS (fecha, n)=Devuelve la fecha "fecha" incrementada en "n" meses. LASTDAY (fecha)=Devuelve la fecha del ltimo da del mes que contiene "fecha". MONTHS_BETWEEN (fecha1, fecha2)=Devuelve la diferencia en meses entre las fechas

"fecha1" y "fecha2".
NEXT_DAY (fecha, cad)=Devuelve la fecha del primer da de la semana indicado por

"cad" despus de la fecha indicada por "fecha". Funciones de conversin:


TO_CHAR=Transforma un tipo DATE NUMBER en una cadena de caracteres.

TO_DATE=Transforma un tipo NUMBER CHAR en DATE. TO_NUMBER=Transforma una cadena de caracteres en NUMBER.

caractersticas de los lenguajes de DDL y DML.

CONCEPTOS DE SQL, DML Y DDL


SQL 1.El lenguaje de consulta estructurado (SQL) es un lenguaje de base de datos normalizado utilizando por el motor de base de datos de Microsoft Jet SQL se utiliza para crear objetos QueryDef como el argumento de origen del metodo OpenRecordSet y como la propiedad RecordSource del control de datos. Tambin se puede utilizar con el mtodo Execute para crear y manipular directamente las bases de datos Jet y crear consultas SQL de paso a travs para manipular base de datos remontas clientes-servidor. 2. El Lenguaje de consulta estructurado (SQL [/esecuele/ en espaol, /sicul/ en ingls] Structured Query Language ) es un lenguaje declarativo de acceso a bases de datos relacionales que permite especificar diversos tipos de operaciones sobre las mismas. Una de sus caractersticas es el manejo del lgebra y el clculo relacional permitiendo lanzar consultas con el fin de recuperar informacin de inters de una base de datos, de una forma sencilla. Es un lenguaje de cuarta generacin (4GL). 3. SQL es un lenguaje estndar para acceder a los datos almacenados en una base de datos (Structured Query Language lenguaje de consulta estructurado). Su utilidad radica en que la mayora bases de datos actuales permiten hacerles consultas en este lenguaje. Estas consultas muchas veces se podrn hacer desde el propio programa gestor de bases de datos, y frecuentemente tambin desde nuestros programas, creados en otros lenguajes de programacin. 4. SQL: lenguaje creado por IBM para el acceso a la informacin en una base de datos y poder as gestionar entradas, borrarlas, ponerlas al da, etc. Las bases de datos SQL son ms robustas y fiables que las bases de datos del campo de la ofimtica. English: SQL. Euskara: SQL. 5. El lenguaje SQL esta compuesto por comandos, clusulas, operadores y funciones de agregado. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases de datos.

Comandos Existen dos tipos de comandos SQL: Los DLL que permiten crear y definir nuevas bases de datos, campos e ndices. Los DML que permiten generar consultas para ordenar, filtrar y extraer datos de la base de datos.

Comandos DLL Comando Descripcin CREATE Utilizado para crear nuevas tablas, campos ndices DROP ALTER Empleado para eliminar tablas e ndices Utilizado para modificar las tablas agregando campos o cambiando la definicin

de los campos.

Comandos DML Comando Descripcin SELECT Utilizado ara consultar registros de la base de datos que satisfagan un criterio determinado INSERT Utilizado para cargar lotes de datos en la base de datos en una nica operacin.

UPDATE Utilizado para modificar los valores de los campos y registros especificados DELETE Utilizado para eliminar registros de una tabla de una base de datos

Clusulas Las clusulas son condiciones de modificacin utilizadas para definir los datos que desea seleccionar o manipular. Comando Descripcin FROM Utilizada para especificar la tabla de la cual se van a seleccionar los registros WHERE Utilizada para especificar las condiciones que deben reunir los registros que se van a seleccionar GROUP BY Utilizada para separar los registros seleccionados en grupos especficos HAVING Utilizada para expresar la condicin que debe satisfacer cada grupo ORDER BY Utilizada para ordenar los registros seleccionados de acuerdo con un orden especfico

Operadores Lgicos Operador Uso

AND Es el y lgico. Evala dos condiciones y devuelve un valor de verdad slo si ambas son ciertas. OR Es el o lgico. Evala dos condiciones y devuelve un valor de verdad si alguna de las dos es cierta. NOT Negacin lgica. Devuelve el valor contrario de la expresin.

Operadores de comparacin Operador Uso < Menor que > Mayor que <> Distinto de <= Menor Igual que >= Mayor Igual que BETWEEN Utilizado para especificar un intervalo de valores. LIKE

Utilizado en la comparacin de un modelo In Utilizado para especificar registros de una base de datos

Funciones Agregad Las funciones de agregado se usa dentro de una clusula SELECT en grupos de registros para devolver un nico valor que se aplica a un grupo de registros. Comandos descripcin AVG Utilizada para calcular el promedio de los valores de un campo determinado COUNT Utilizada para devolver el nmero de registros de la seleccin SUM Utilizada para devolver la suma de todos los valores de un campo determinado MAX Utilizada para devolver el valor ms alto de un campo especificado MIN Utilizada para devolver el valor ms bajo de un campo especificado

DML 1. Son las siglas de Data Manipulation Language y se refiere a los comandos que permiten al usuario manipular los datos en un repositorio. Es decir, aadir, consultar, borrar o actualizar.

2. Un desencadenador DML es una accin programada para ejecutarse cuando se produce un evento DML (lenguaje de manipulacin de datos) en el servidor de base de datos. Los eventos DML incluyen instrucciones UPDATE, INSERT o DELETE emitidas en una tabla o una vista. Los desencadenadores DML se utilizan para exigir reglas empresariales cuando se modifican los datos y para ampliar la lgica de comprobacin de integridad de las restricciones, valores predeterminados y reglas de Microsoft SQL Server 2005.

DDT Un lenguaje de definicin de datos (Data Definition Language DDL por sus siglas en ingles) es un lenguaje proporcionado por el sistema de gestin de bases de datos que permite a los usuarios de la misma llevar a cabo las tareas de definicin de las estructuras que almacenaran los datos as como de los procedimientos o funciones que permitan consultar

Creacin del esquema de una BD.


Tema 8. El DDL, lenguaje de definicin de datos (II) Tema 8. El DDL, lenguaje de definicin de datos (I)
Introduccin
Hasta ahora hemos estudiado las sentencias que forman parte del DML (Data Management Language) lenguaje de manipulacin de datos, todas esas sentencias sirven para recuperar, insertar, borrar, modificar los datos almacenados en la base de datos; lo que veremos en este tema son las sentencias que afectan a la estructura de los datos. El DDL (Data Definition Language) lenguaje de definicin

Bsqueda

Bsqueda

de datos es la parte del SQL que ms vara de un sistema a otro ya que esa area tiene que ver con cmo se organizan internamente los datos y eso, cada sistema lo hace de una manera u otra. As como el DML de Microsoft Jet incluye todas las sentencias DML que nos podemos encontrar en otros SQLs (o casi todas), el DDL de Microsoft Jet en cambio contiene menos instrucciones que otros sistemas.

CREATE TABLE
La sentencia CREATE TABLE sirve para crear la estructura de una tabla no para rellenarla con datos, nos permite definir las columnas que tiene y ciertas restricciones que deben cumplir esas columnas. La sintaxis es la siguiente:

nbtabla: nombre de la tabla que estamos definiendo nbcol: nombre de la columna que estamos definiendo tipo: tipo de dato de la columna, todos los datos almacenados en la columna debern ser de ese tipo. Para ver qu tipos de datos se pueden emplear haz clic aqu Una restriccin consiste en la definicin de una caracterstica adicional que tiene una columna o una combinacin de columnas, suelen ser caractersticas como valores no nulos (campo requerido), definicin de ndice sin duplicados, definicin de clave principal y definicin de clave fornea (clave ajena o externa, campo que sirve para relacionar dos tablas entre s). restriccin1: una restriccin de tipo 1 es una restriccin que aparece dentro de la definicin de la columna despus del tipo de dato y afecta a una columna, la que se est definiendo. restriccin2: una restriccin de tipo 2 es una restriccin que se define despus de definir todas las columnas de la tabla y afecta a una columna o a una combinacin de columnas. Para escribir una sentencia CREATE TABLE se empieza

por indicar el nombre de la tabla que queremos crear y a continuacin entre parntesis indicamos separadas por comas las definiciones de cada columna de la tabla, la definicin de una columna consta de su nombre, el tipo de dato que tiene y podemos aadir si queremos una serie de especificaciones que debern cumplir los datos almacenados en la columna, despus de definir cada una de las columnas que compone la tabla se pueden aadir una serie de restricciones, esas restricciones son las mismas que se pueden indicar para cada columna pero ahorapueden afectar a ms de una columna por eso tienen una sintaxis ligeramente diferente. Una restriccin de tipo 1 se utiliza para indicar una caracterstica de la columna que estamos definiendo, tiene la siguiente sintaxis:

La clusula NOT NULL indica que la columna no podr contener un valor nulo, es decir que se deber rellenar obligatoriamente y con un valor vlido (equivale a la propiedad requerido S de las propiedades del campo). La clusula CONSTRAINT sirve para definir una restriccin que se podr eliminar cuando queramos sin tener que borrar la columna. A cada restriccin se le asigna un nombre que se utiliza para identificarla y para poder eliminarla cuando se quiera. Como restricciones tenemos la de clave primaria (clave principal), la de ndice nico (sin duplicados), la de valor no nulo, y la de clave fornea. La clusula PRIMARY KEY se utiliza para definir la columna como clave principal de la tabla. Esto supone que la columna no puede contener valores nulos ni pueden haber valores duplicados en esa columna, es decir que dos filas no pueden tener el mismo valor en esa columna. En una tabla no pueden haber varias claves principales, por lo que no podemos incluir la clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error. No hay que

confundir la definicin de varias claves principales con la definicin de una clave principal compuesta por varias columnas, esto ltimo s est permitido y se define con una restriccin de tipo 2. La clusula UNIQUE sirve para definir un ndice nico sobre la columna. Un ndice nico es un ndice que no permite valores duplicados, es decir que si una columna tiene definida un restriccin de UNIQUE no podrn haber dos filas con el mismo valor en esa columna. Se suele emplear para que el sistema compruebe el mismo que no se aaden valores que ya existen, por ejemplo si en una tabla de clientes queremos asegurarnos que dos clientes no puedan tener el mismo D.N.I. y la tabla tiene como clave principal un cdigo de cliente, definiremos la columna dni con la restriccin de UNIQUE. La clusula NOT NULL indica que la columna no puede contener valores nulos, cuando queremos indicar que una columna no puede contener el valor nulo lo podemos hacer sin poner la clusula CONSTRAINT, o utilizando una clusula CONSTRAINT. La ltima restriccin que podemos definir sobre una columna es la de clave fornea, una clave fornea es una columna o conjunto de columnas que contiene un valor que hace referencia a una fila de otra tabla, en una restriccin de tipo 1 se puede definir con la clusula REFERENCES, despus de la palabra reservada indicamos a qu tabla hace referencia, opcionalmente podemos indicar entre parntesis el nombre de la columna donde tiene que buscar el valor de referencia, por defecto coge la clave principal de la tabla2, si el valor que tiene que buscar se encuentra en otra columna de tabla2, entonces debemos inidicar el nombre de esta columna entre parntesis, adems slo podemos utilizar una columna que est definida con una restriccin de UNIQUE, si la columna2 que indicamos no est definida sin duplicados, la sentencia CREATE nos dar un error. Si quieres repasar conceptos de clave fornea e integridad referencial haz clic aqu Para seguir con la instruccin CREATE TABLE pasa a la siguiente pgina... Ejemplo: CREATE TABLE tab1 ( col1 INTEGER CONSTRAINT pk PRIMARY KEY, col2 CHAR(25) NOT NULL, col3 CHAR(10) CONSTRAINT uni1 UNIQUE, col4 INTEGER, col5 INT CONSTRAINT fk5 REFERENCES tab2 ); Con este ejemplo estamos creando la tabla tab1 compuesta por: una columna llamada col1 de tipo entero definida como clave principal, una columna col2 que puede almacenar hasta 25

caracteres alfanumricos y no puede contener valores nulos, una columna col3 de hasta 10 caracteres que no podr contener valores repetidos, una columna col4 de tipo entero sin ninguna restriccin, y una columna col5 de tipo entero clave fornea que hace referencia a valores de la clave principal de la tabla tab2.

CREATE TABLE...Continuacin

Una restriccin de tipo 2 se utiliza para definir una caracterstica que afecta a una columna o a una combinacin de columnas de la tabla que estamos definiendo, se escribe despus de haber definido todas las columnas de la tabla. Tiene la siguiente sintaxis:

La sintaxis de una restriccin de tipo 2 es muy similar a la CONSTRAINT de una restriccin 1 la diferencia es que ahora tenemos que indicar sobre qu columnas queremos definir la restriccin. Se utilizan obligatoriamente las restricciones de tipo 2 cuando la restriccin afecta a un grupo de columnas o cuando queremos definir ms de una CONSTRAINT para una columna (slo se puede definir una restriccin1 en cada columna). La clusula PRIMARY KEY se utiliza para definir la clave principal de la tabla. Despus de las palabras PRIMARY KEY se indica entre parntesis el nombre de la columna o las columnas que forman la clave principal. Las columnas que forman la clave principal no pueden contener valores nulos ni pueden haber valores duplicados de la combinacin de columnas, por ejemplo la tabla pedidos de nuestros ejemplos tiene una clave principal formada por idfab e idproducto, pues no pueden haber dos filas con la misma combinacin de idfab con idproducto (aci,0001 por ejemplo) pero s pueden haber dos filas con el valor aci en la columna idfab si tienen valores diferentes en la columna idproducto, y pueden haber dos filas con el mismo idproducto pero distinto idfab. En una tabla no pueden haber varias claves principales, por lo que no podemos indicar la clusula PRIMARY KEY ms de una vez, en caso contrario la sentencia da un error.

La clusula UNIQUE sirve para definir un ndice nico sobre una columna o sobre una combinacin de columnas. Un ndice nico es un ndice que no permite valores duplicados. Si el ndice es sobre varias columnas no se puede repetir la misma combinacin de valores en dos o ms filas. Se suele emplear para que el sistema compruebe el mismo que no se aaden valores que ya existen. La clusula FOREIGN KEY sirve para definir una clave fornea sobre una columna o una combinacin de columnas. Una clave fornea es una columna o conjunto de columnas que contiene un valor que hace referencia a una fila de otra tabla , en una restriccin 1 se puede definir con la clusula REFERENCES. Para definir una clave fornea en una restriccin de tipo 2 debemos empezar por las palabras FOREIGN KEYdespus indicamos entre parntesis la/s columna/s que es clave fornea, a continuacin la palabra reservada REFERENCES seguida del nombre de la tabla a la que hace referencia, opcionalmente podemos indicar entre parntesis el nombre de la/s columna/s donde tiene que buscar el valor de referencia, por defecto coge la clave principal de la tabla2, si el valor que tiene que buscar se encuentra en otra/s columna/s de tabla2, entonces debemos escribir el nombre de esta/s columna/s entre parntesis, adems slo podemos utilizar una columna (o combinacin de columnas) que est definida con una restriccin de UNIQUE, de lo contrario la sentenciaCREATE TABLE nos dar un error. Si necesitas repasar los conceptos de integridad referencial pincha aqu Ejemplo: CREATE TABLE tab1 (col1 INTEGER, col2 CHAR(25) NOT NULL, col3 CHAR(10), col4 INTEGER, col5 INT, CONSTRAINT pk PRIMARY KEY (col1), CONSTRAINT uni1 UNIQUE (col3), CONSTRAINT fk5 FOREIGN KEY (col5) REFERENCES tab2 ); Con este ejemplo estamos creando la misma tabla tab1 del ejemplo de la pgina anterior pero ahora hemos definido las restricciones utilizando restricciones de tipo 2.

La sintaxis de restriccion2 es idntica a la restriccin2 de la sentencia CREATE TABLE, te la describimos a continuacin, si tienes alguna duda repasa la sentencia CREATE TABLE.

La clusula ADD COLUMN (la palabra COLUMN es opcional) permite aadir una columna nueva a la tabla. Como en la creacin de tabla, hay que definir la columna indicando su nombre, tipo de datos que puede contener, y si lo queremos alguna restriccin de valor no nulo, clave primaria, clave fornea, e ndice nico, restriccion1 es opcional e indica una restriccin de tipo 1 que afecta a la columna que estamos definiendo. Ejemplo: ALTER TABLE tab1 ADD COLUMN col3 integer NOT NULL CONSTRAINT c1 UNIQUE Con este ejemplo estamos aadiendo a la tabla tab1 una columna llamada col3 de tipo entero, requerida (no admite nulos) y con un ndice sin duplicados llamado c1. Cuando aadimos una columna lo mnimo que se puede poner sera: ALTER TABLE tab1 ADD col3 integer En este caso la nueva columna admite valores nulos y duplicados. Para aadir una nueva restriccin en la tabla podemos utilizar la clusula ADD restriccion2 (ADD CONSTRAINT...). Ejemplo: ALTER TABLE tab1 ADD CONSTRAINT c1 UNIQUE (col3) Con este ejemplo estamos aadiendo a la tabla tab1 un ndice nico (sin duplicados) llamado c1 sobre la columna col3. Para borrar una columna basta con utilizar la clusula DROP COLUMN (COLUMN es opcional) y el nombre de la columna que queremos borrar, se perdern todos los datos almacenados en la columna.

Ejemplo: ALTER TABLE tab1 DROP COLUMN col3 Tambin podemos escribir: ALTER TABLE tab1 DROP col3 El resultado es el mismo, la columna col3 desaparece de la tabla tab1. Para borrar una restriccin basta con utilizar la clusula DROP CONSTRAINT y el nombre de la restriccin que queremos borrar, en este caso slo se elimina la definicin de la restriccin pero los datos almacenados no se modifican ni se pierden. Ejemplo: ALTER TABLE tab1 DROP CONSTRAINT c1 Con esta sentencia borramos el ndice c1 creado anteriormente pero los datos de la columna col3 no se ven afectados por el cambio.

DROP TABLE
La sentencia DROP TABLE sirve para eliminar una tabla. No se puede eliminar una tabla si est abierta, tampoco la podemos eliminar si el borrado infringe las reglas de integridad referencial (si interviene como tabla padre en una relacin y tiene registros relacionados). La sintaxis es la siguiente:

Ejemplo: DROP TABLE tab1 Elimina de la base de datos la tabla tab1.

CREATE INDEX
La sentencia CREATE INDEX sirve para crear un ndice sobre una o varias columnas de una tabla. Si quieres repasar conceptos bsicos sobre ndices haz clic aqu La sintaxis es la siguiente:

nbindi: nombre del ndice que estamos definiendo. En una tabla no pueden haber dos ndices con el mismo nombre de lo contrario da error. nbtabla: nombre de la tabla donde definimos el ndice. A continuacin entre parntesis se indica la composicin del ndice (las columnas que lo forman). nbcol: nombre de la columna que indexamos. Despus del nombre de la columna podemos indicar cmo queremos que se ordenen las filas segn el ndice mediante las clusulas ASC/DESC. ASC: la clusula ASC es la que se asume por defecto e indica que el orden elegido para el ndice es ascendente (en orden alfabtico si la columna es de tipo texto, de menor a mayor si es de tipo numrico, en orden cronolgico si es de tipo fecha). DESC: indica orden descendente, es decir el orden inverso al ascendente. Podemos formar un ndice basado en varias columnas, en este caso despus de indicar la primera columna con su orden, se escribe una coma y la segunda columna tambin con su orden, as sucesivamente hasta indicar todas las columnas que forman el ndice. Opcionalmente se pueden indicar las clusulas: WITH PRIMARY indica que el ndice define la clave principal de la tabla, si la tabla ya tiene una clave principal, la sentencia CREATE INDEX dar error. WITH DISALLOW NULL indica que no permite valores nulos en las columnas que forman el ndice. WITH IGNORE NULL indica que las filas que tengan valores nulos en las columnas que forman el ndice se ignoran, no aparecen cuando recuperamos las filas de la tabla utilizando ese ndice.

Ejemplo: CREATE UNIQUE INDEX fecha_nacimiento DESC) ind1 ON clientes (provincia, poblacion ASC,

Crea un ndice llamado ind1 sobre la tabla clientes formado por las columnas provincia, poblacin y fecha_nacimiento. Este ndice permite tener ordenadas las filas de la tabla clientes de forma que aparezcan los clientes ordenados por provincia, dentro de la misma provincia por poblacin y dentro de la misma poblacin por edad y del ms joven al ms

mayor. Al aadir la clusula UNIQUE el ndice no permitir duplicados por lo que no podra tener dos clientes con la misma fecha de nacimiento en la misma poblacin y misma provincia, para evitar el poblema sera mejor utilizar: CREATE INDEX ind1 ON clientes (provincia, poblacion ASC, fecha_nacimiento DESC)

DROP INDEX
La sentencia DROP INDEX sirve para eliminar un ndice de una tabla. Se elimina el ndice pero no las columnas que lo forman. La sintaxis es la siguiente:

Ejemplo: DROP INDEX ind1 ON clientes Elimina el ndice que habamos creado en el ejemplo anterior.

clusulas y sintaxis del DDL para la creacin de BD (crea base de datos, crea tabla, creacin de ndice, definicin de restricciones, definicin de llave primaria y fornea) y vistas.
Para aadir una nueva columna o restriccin utilizamos la clusula ADD seguida de la definicin de lo que queremos aadir, para eso seguimos la misma sintaxis que para definir las columnas y restricciones de tabla del CREATE TABLE. Por ejemplo: ALTER TABLE Clientes ADD email varchar(50); Aade una nueva columna email. ALTER TABLE Clientes ADD CONSTRAINT Pk PRIMARY KEY (codcli); Aade una restriccin de clave primaria sobre la columna codcli que ya existe en la tabla. La clusula WITH CHECK|NOCHECK permite establecer si la restriccin que estamos aadiendo se tiene que comprobar en las filas que ya existen en la tabla. Con la clusula DROP podemos eliminar de la tabla una restriccin (DROP CONSTRAINT),

o una columna (DROP COLUMN). Con las siguientes limitaciones: Una restriccin PRIMARY KEY no puede quitarse si existe un ndice XML en la tabla. Una columna no puede quitarse si se utiliza en un ndice, en una restriccin CHECK, FOREIGN KEY, UNIQUE o PRIMARY KEY, DEFAULT. Ejemplo: ALTER TABLE Clientes DROP COLUMN Elimina de la tabla Clientes la columna email que habamos creado anteriormente. email;

ALTER TABLE Clientes DROP CONSTRAINT pk ; Elimina de la tabla Clientes la restriccin de PRIMARY KEY, la columna sigue en la tabla pero ya no es clave principal. Para finalizar, las dos ltimas clusulas nos permiten indicar si se tienen que comprobar o no determinadas restricciones y habilitar y deshabilitar triggers. CHECK CONSTRAINT ALL activa la comprobacin de todas las restricciones definidas sobre la tabla. DISABLE TRIGGER ALL deshabilita todos los triggers definidos sobre la tabla. Cuando deshabilitamos un trigger, ste sigue definido, pero no entra en accin cuando se produce el evento que debera activarlo. En cualquier momento lo podremos habilitar con otra instruccin ALTER TABLE.

8.8. Crear una vista CREATE VIEW


Una vista es una tabla virtual que representa los datos de una o ms tablas de una forma alternativa. Para crear una nueva vista se emplea la sentencia CREATE VIEW, debe ser la primera instruccin en un lote de consultas. Una vista slo se puede crear en la base de datos actual. Para ejecutar CREATE VIEW, se necesita, como mnimo, el permiso CREATE VIEW en la base de datos y el permiso ALTER en el esquema en el que se est creando la vista. Sintaxis: CREATE VIEW [nbEsquema.] nbVista [ (columna [ ,...n ] ) ] AS ( sentencia_select ) [ ; ] nbEsquema Es el nombre del esquema al que pertenece la nueva tabla. nbVista Es el nombre de la nueva vista. Los nombres de vistas deben seguir las reglas de los identificadores. sentencia_select Es la instruccin SELECT que define la vista. Dicha instruccin puede utilizar ms de una tabla y otras vistas. Se necesitan permisos adecuados para seleccionar los objetos a los que se hace referencia en la clusula SELECT de la vista que se ha creado. Una vista no tiene por qu ser un simple subconjunto de filas y de columnas de una tabla determinada. Es posible crear una vista que utilice ms de una tabla u otras vistas mediante una clusula SELECT de cualquier complejidad. Tambin se pueden utilizar funciones y varias instrucciones SELECT separadas por UNION o UNION ALL.

Una vista puede tener como mximo 1.024 columnas. Ejemplos: CREATE VIEW oficinas_este AS SELECT * FROM oficinas WHERE region = Crea una vista con las oficinas del este. CREATE VIEW oficinas_empleados AS SELECT oficinas.oficina AS ofi, ciudad, dir, oficinas.ventas AS ventas_ofi, empleados.* FROM oficinas INNER JOIN empleados ON oficinas.oficina = empleados.oficina; Crea una vista con los datos de todos los empleados y de sus oficinas. En este caso hemos tenido que definir alias de campo porque en el origen de la sentencia SELECT existe duplicidad de nombres. CREATE VIEW oficinas_EO AS SELECT * FROM oficinas WHERE region = Este; UNION ALL SELECT * FROM oficinas WHERE region = Oeste; Por defecto las columnas de la vista heredan los nombres de las columnas de la sentencia SELECT asociada, pero podemos cambiar estos nombres indicando una lista de columnas despus del nombre de la vista. CREATE VIEW oficinas_este Eobjetivo,Eventas) (Eoficina, Eciudad, Eregion, Edir, region, objetivo, Este;

AS SELECT * FROM oficinas WHERE region = Este; Utilizando una lista de columnas ya no tenemos que definir alias de columna en la sentencia SELECT como pasaba en el caso de la vista oficinas_empleados. Normalmente se utiliza la lista de columnas cuando una columna proviene de una expresin aritmtica, una funcin o una constante; cuando dos o ms columnas puedan tener el mismo nombre, normalmente debido a una combinacin; o cuando una columna de una vista recibe un nombre distinto al de la columna de la que proviene. En definitiva se puede optar por utilizar la lista de columnas o definir alias de campo en la

sentencia SELECT. Cuando utilizamos una vista en una operacin de actualizacin (INSERT, UPDATE, DELETE), la vista debe ser actualizable, para ello debe seguir las siguientes reglas: Cualquier modificacin, incluida en las instrucciones UPDATE, INSERT y DELETE, debe hacer referencia a las columnas de una nica tabla base. Las columnas que se vayan a modificar en la vista deben hacer referencia directa a los datos subyacentes de las columnas de la tabla, es decir que las columnas no se pueden obtener de otra forma, como con una funcin de agregado: AVG, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR y VARP, o un clculo. Las columnas formadas mediante los operadores de conjunto UNION, UNION ALL, CROSSJOIN, EXCEPT e INTERSECT equivalen a un clculo y tampoco son actualizables. Las columnas que se van a modificar no se ven afectadas por las clusulas GROUP BY, HAVING o DISTINCT. Las restricciones anteriores se aplican a cualquier subconsulta de la clusula FROM de la vista, al igual que a la propia vista. Normalmente, el Database Engine (Motor de base de datos) debe poder realizar un seguimiento sin ambigedades de las modificaciones de la definicin de la vista a una tabla base.

8.9. Eliminar una vista DROP VIEW


Para eliminar una vista de una base de datos tenemos la sentencia DROP TABLE. Sintaxis: DROP VIEW [nbEsquema.]nbVista[ ,...n ] [ ; ] Se eliminan las vista de la base de datos actual. Cuando eliminamos una vista eliminamos su definicin y los permisos asociados a ella. Se pueden quitar varias vistas en una misma sentencia DROP VIEW escribiendo los nombres de las vistas a eliminar separados por comas. Para ejecutar DROP VIEW, como mnimo, se necesita el permiso ALTER en SCHEMA o el permiso CONTROL en OBJECT. Ejemplo: DROP VIEW oficinas_este, oficinas_EO;

Elimina las vistas oficinas_este y oficinas_EO. Si eliminamos una tabla mediante DROP TABLE, se deben quitar explcitamente, con DROP VIEW, las vistas basadas en esta tabla ya que no se quitarn por s solas.

8.10. Definicin de ndice

Un ndice es una estructura de datos definida sobre una columna de tabla (o varias) y que permite localizar de forma rpida las filas de la tabla en base a su contenido en la columna indexada adems de permitir recuperar las filas de la tabla ordenadas por esa misma columna. Funciona de forma parecida al ndice de un libro donde tenemos el ttulo del captulo y la pgina donde empieza dicho captulo, en un ndice definido sobre una determinada columna tenemos el contenido de la columna y la posicin de la fila que contiene dicho valor dentro de la tabla. La definicin de los ndices de la base de datos es tarea del administrador de la base de datos, los administradores ms experimentados pueden disear un buen conjunto de ndices, pero esta tarea es muy compleja, consume mucho tiempo y est sujeta a errores, incluso con cargas de trabajo y bases de datos con un grado de complejidad no excesivo.

8.11. Tipos de ndices


ndice simple y compuesto.

Un ndice simple est definido sobre una sla columna de la tabla mientras que un ndice compuesto est formado por varias columnas de la misma tabla (tabla sobre la cual est definido el ndice. Cuando se define un ndice sobre una columna, los registros que se recuperen utilizando el ndice aparecern ordenados por el campo indexado. Si se define un ndice compuesto por las columnas col1 y col2, las filas que se recuperen utilizando dicho ndice aparecern ordenadas por los valores de col1 y todas las filas que tengan el mismo valor de col1 se ordenarn a su vez por los valores contenidos en col2, funcin igual que la clusula ORDER BY vista en el tema de consultas simples. Por ejemplo si definimos un ndice compuesto basado en las columnas (provincia, localidad), las filas que se recuperen utilizando este ndice aparecern ordenadas por provincia y dentro de la misma provincia por localidad.
ndice agrupado y no agrupado,

El trmino ndice agrupado no se debe confundir con ndice compuesto, el significado es totalmente diferente. Un ndice agrupado (CLUSTERED) es un ndice en el que el orden lgico de los valores de clave determina el orden fsico de las filas correspondientes de la tabla. El nivel inferior, u hoja, de un ndice agrupado contiene las filas de datos en s de la tabla. Una tabla o vista permite un solo ndice agrupado al mismo tiempo. Los ndices no agrupados existentes en las tablas se vuelven a generar al crear un ndice agrupado, por lo que es conveniente crear el ndice agrupado antes de crear los ndices no agrupados. Un ndice no agrupado especifica la ordenacin lgica de la tabla. Con un ndice no agrupado, el orden fsico de las filas de datos es independiente del orden indizado.
ndice nico

ndice nico es aquel en el que no se permite que dos filas tengan el mismo valor en la columna de clave del ndice. Es decir que no permite valores duplicados.

8.12. Ventajas e inconvenientes de los ndices


Ventajas

La utilizacin de ndices puede mejorar el rendimiento de las consultas, ya que los datos necesarios para satisfacer las necesidades de la consulta existen en el propio ndice. Es decir, slo se necesitan las pginas de ndice y no las pginas de datos de la tabla o el ndice agrupado para recuperar los datos solicitados; por tanto, se reduce la E/S global en el disco. Por ejemplo, una consulta de las columnas a y b de una tabla que dispone de un ndice compuesto creado en las columnas a, b y c puede recuperar los datos especificados del propio ndice. Los ndices en vistas pueden mejorar de forma significativa el rendimiento si la vista contiene agregaciones, combinaciones de tabla o una mezcla de agregaciones y combinaciones.
Inconvenientes

Las tablas utilizadas para almacenar los ndices ocupan espacio. Los ndices consumen recursos ya que cada vez que se realiza una operacin de actualizacin, insercin o borrado en la tabla indexada, se tienen que actualizar todas las tablas de ndice definidas sobre ella (en la actualizacin slo es necesaria la actualizacin de los ndices definidos sobre las columnas que se actualizan). Por estos motivos no es buena idea definir ndices indiscriminadamente.
Consideraciones a tener en cuenta

A la hora de definir ndices se deben de tener en cuenta estas consideraciones:


Hay que evitar crear demasiados ndices en tablas que se actualizan con mucha frecuencia y procurar definirlos con el menor nmero de columnas posible. Es conveniente utilizar un nmero mayor de ndices para mejorar el rendimiento de consultas en tablas con pocas necesidades de actualizacin, pero con grandes volmenes de datos. Un gran nmero de ndices contribuye a mejorar el rendimiento de las consultas que no modifican datos, como las instrucciones SELECT, ya que el optimizador de consultas dispone de ms ndices entre los que elegir para determinar el mtodo de acceso ms rpido. La indizacin de tablas pequeas puede no ser una solucin ptima, porque puede provocar que el optimizador de consultas tarde ms tiempo en realizar la bsqueda de los datos a travs del ndice que en realizar un simple recorrido de la tabla. De este modo, es posible que los ndices de tablas pequeas no se utilicen nunca; sin embargo, sigue siendo necesario su mantenimiento a medida que cambian los datos de la tabla. Se recomienda utilizar una longitud corta en la clave de los ndices agrupados. Los

ndices agrupados tambin mejoran si se crean en columnas nicas o que no admitan valores NULL.

Un ndice nico en lugar de un ndice no nico con la misma combinacin de columnas proporciona informacin adicional al optimizador de consultas y, por tanto, resulta ms til. Hay que tener en cuenta el orden de las columnas si el ndice va a contener varias columnas. La columna que se utiliza en la clusula WHERE en una condicin de bsqueda igual a (=), mayor que (>), menor que (<) o BETWEEN, o que participa en una combinacin, debe situarse en primer lugar. Las dems columnas deben ordenarse basndose en su nivel de diferenciacin, es decir, de ms distintas a menos distintas.

Pg. 8.15

8.13. Definir un ndice CREATE INDEX


CREATE [ nombre_indice ON [ ; ] <objeto> ::= { [nbBaseDatos.[nbEsquema].| nbEsquema.]nbTablaVista } Esta es la sintaxis simplicada de la instruccin CREATE INDEX que permite crear un ndice en una tabla sobre una o varias columnas. nbBaseDatos Es el nombre de la base de datos. nbEsquema Es el nombre del esquema al que pertenece la tabla/vista. nbTablaVista Es el nombre de la tabla o vista sobre la que se quiere crear el ndice. nombre_indice Es el nombre del ndice que estamos creando. Columna Es el nombre de la columna que forma parte del ndice. Se pueden definir ndices compuestos escribiendo entre parntesis los nombres de las columnas separados por comas. ASC los valores de la columna se ordenarn de forma ASCendente o DESCendente. Por defecto se asume ASC. UNIQUE permite definir un ndice nico (no admite valores repetidos). CLUSTERED el ndice ser agrupado. NONCLUSTERED (valor por defecto) el ndice ser no agrupado. Ejemplos: CREATE INDEX I_clientes_nombre ON Clientes (nombre) UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX

<objeto> (columna [ ASC | DESC ] [ ,...n ] )

Crea un ndice no agrupado sobre la columna nombre de la tabla Clientes en la base de datos actual, las filas se ordenarn de forma ascendente.

CREATE INDEX I_clientes_ApeNom ON

Clientes (apellidos, nombre)

Crea un ndice no agrupado sobre las columnas apellidos y nombre de la tabla Clientes en la base de datos actual, las filas se ordenarn de forma ascendente por apellido y dentro del mismo apellido por nombre. CREATE INDEX DESC,apellidos) I_clientes_EdadApe ON Clientes (edad

Crea un ndice no agrupado sobre las columnas edad y apellidos de la tabla Clientes en la base de datos actual, las filas se ordenarn de forma descendente por edad y ascendente por apellido. Aparecern los clientes de mayor a menor edad y los clientes de la misma edad se ordenarn por apellido (por orden alfabtico). CREATE CLUSTERED INDEX I_clientes_cod ON Clientes (codigo) Crea un ndice agrupado sobre la columna codigo de la tabla Clientes en la base de datos actual, las filas se ordenarn y almacenarn por orden de cdigo. CREATE UNIQUE INDEX U_clientes_col ON Clientes (col)

Crea un ndice nico sobre la columna col de la tabla Clientes en la base de datos actual, la columna col no podr contener valores duplicados.

8.14. Eliminar un ndice DROP INDEX


Para eliminar un ndice tenemos la sentencia DROP INDEX. La instruccin DROP INDEX no es aplicable a los ndices creados mediante la definicin de restricciones PRIMARY KEY y UNIQUE. Para quitar la restriccin y el ndice correspondiente, se tiene que ejecutar un ALTER TABLE con la clusula DROP CONSTRAINT. Sintaxis simplificada: DROP INDEX <indice> [ ,...n <indice>::= { nbindice ON [nbBaseDatos.[nbEsquema].|nbEsquema.]nbTablaVista } nbBaseDatos Es el nombre de la base de datos. nbEsquema Es el nombre del esquema al que pertenece la tabla/vista. nbTablaVista Es el nombre de la tabla o vista de la que se quiere eliminar el ndice. nbindice Es el nombre del ndice a eliminar. ] [ ; ]

Ejemplo: DROP INDEX U_clientes_col ON Clientes;

Elimina el ndice U_clientes_col definido sobre la tabla Clientes.

clusulas y sintaxis del DDL para la modificacin de BD (alter y drop).


8.3. Eliminar una base de datos DROP DATABASE
Para eliminar una base de datos tenemos la instruccin DROP DATABASE. DROP DATABASE { nbBasedeDatos } [ ,...n ] [;] La base de datos puede ser una base de datos normal o una instantnea de base de datos. Para poder ejecutar la sentencia el usuario debe tener permiso de CONTROL y se debe de ejecutar en un contexto diferente del de la base de datos a eliminar, por ejemplo: use b1

DROP DATABASE b1 Falla porque con el use estamos en el contexto de la base de datos a eliminar. Como se ve en la sintaxis podemos eliminar varias bases de datos con una sla sentencia DROP DATABASE. Por ejemplo: DROP DATABASE b1,b2 Elimina las bases de datos b1 y b2.

8.4. Modificar las propiedades de una BD ALTER DATABASE


Si despus de crear la base de datos queremos cambiar algo de su definicin podramos eliminarla (con DROP DATABASE) y luego crearla otra vez (con CREATE DATABASE), pero si ya la hemos rellenado con tablas u otros objetos, esta solucin no sera muy prctica. Para cambiar la definicin de la base de datos una vez creada tenemos que utilizar la sentencia ALTER DATABASE. Para poder ejecutar esta sentencia se debe de tener el permiso ALTER en la base de datos. Esta sentencia se debe ejecutar en el modo de confirmacin automtica (modo de administracin de transacciones predeterminado) y no se permite en una transaccin explcita o implcita. Las instantneas de bases de datos no se pueden modificar, y para modificar las opciones de base de datos asociadas a la rplica, se utiliza el procedimiento almacenado del sistema sp_replicationdboption. Sintaxis: ALTER DATABASE nbBasedeDatos { <cambiar_ficheros> | <cambiar_grupos> | <opciones> | MODIFY NAME = nuevo_nbBasedeDatos | COLLATE nbintercalacin } [;] Con esta sentencia resumida datos, nos va a permitir cambiar tambin nos permite cambiar la tipo de intercalacin e incluso MODIFY NAME). Por ejemplo: ALTER DATABASE Cliente MODIFY NAME = Clientes; La base de datos Cliente pasa a llamarse Clientes. Como con la instruccin CREATE DATABASE veremos aqu un resumen de lo que ms le puede interesar a un programador, sin entrar en demasiados detalles de administracin. Como muchas de las palabras ya las hemos explicado con la sentencia CREATE DATABASE, slo insistiremos en lo nuevo. vemos que nos permite cambiar la definicin de la base de la definicin de los ficheros que conforman la base de datos, definicin de los grupos, la definicin de varias opciones, el cambiar el nombre de la base de datos (con la clusula

<cambiar_ficheros>::= { ADD FILE < esp_fichero > [ ,...n ] [ TO FILEGROUP { nbgrupo | DEFAULT } ]

| ADD LOG FILE < esp_fichero > [ ,...n ] | REMOVE FILE nbfichero | MODIFY FILE < esp_fichero } Con este grupo de opciones podemos cambiar la definicin de los archivos de datos de la base de datos. ADD FILE permite aadir un nuevo archivo de datos (o varios) si no se aade nada (o TO FILEGROUP DEFAULT), el archivo se aadir al grupo principal, si aadimos TO FILEGROUP nbgrupo, se aadir el archivo al grupo indicado. Con ADD LOG FILE podemos aadir un nuevo archivo de registro. Con REMOVE FILE nbfichero eliminamos el archivo con nombre nbfichero. Se elimina la definicin del archivo lgico (nbfichero) y elimina el archivo fsico asociado. El archivo no se puede quitar a menos que est vaco. >

manejo de vistas y operaciones con los datos (select, view y funciones de agregado).
El Lenguaje SQL
Como en el caso de los ms modernos lenguajes relacionales, SQL est basado en el clculo relacional de tuplas. Como resultado, toda consulta formulada utilizando el clculo relacional de tuplas ( o su equivalente, el lgebra relacional) se pude formular tambin utilizando SQL. Hay, sin embargo, capacidades que van ms all del clculo o del lgebra relaciona. Aqu tenemos una lista de algunas caractersticas proporcionadas por SQLque no forman parte del lgebra y del clculo relacionales:

Comandos para insercin, borrado o modificacin de datos. Capacidades aritmticas: En SQL es posible incluir operaciones aritmticas as como comparaciones, por ejemplo A < B + 3. Ntese que ni + ni otros operadores aritmticos aparecan en el lgebra relacional ni en clculo relacional.

Asignacin y comandos de impresin: es posible imprimir una relacin construida por una consulta y asignar una relacin calculada a un nombre de relacin. Funciones agregadas: Operaciones tales como promedio (average), suma (sum), mximo (max), etc. se pueden aplicar a las columnas de una relacin para obtener una cantidad nica.

Select
El comando ms usado en SQL es la instruccin SELECT, que se utiliza para recuperar datos. La sintaxis es:
SELECT [ALL|DISTINCT] { * | expr_1 [AS c_alias_1] [, ... [, expr_k [AS c_alias_k]]]} FROM table_name_1 [t_alias_1] [, ... [, table_name_n [t_alias_n]]] [WHERE condition] [GROUP BY name_of_attr_i [,... [, name_of_attr_j]] [HAVING condition]] [{UNION [ALL] | INTERSECT | EXCEPT} SELECT ...] [ORDER BY name_of_attr_i [ASC|DESC] [, ... [, name_of_attr_j [ASC|DESC]]]];

Ilustraremos ahora la compleja sintaxis de la instruccin SELECT con varios ejemplos. Las tablas utilizadas para los ejemplos se definen en: La Base de Datos de Proveedores y Artculos.
Select sencillas

Aqu tenemos algunos ejemplos sencillos utilizando la instruccin SELECT: Ejemplo 4. Query sencilla con cualificacin Para recuperar todas las tuplas de la tabla PART donde el atributo PRICE es mayor que 10, formularemos la siguiente consulta:
SELECT * FROM PART WHERE PRICE > 10;

y obtenemos la siguiente tabla:


PNO | PNAME | PRICE -----+-------------+-------3 | Cerrojos | 15 4 | Levas | 25

Utilizando "*" en la instruccin SELECT solicitaremos todos los atributos de la tabla. Si queremos recuperar slo los atributos PNAME y PRICE de la tabla PART utilizaremos la instruccin:
SELECT PNAME, PRICE FROM PART WHERE PRICE > 10;

En este caso el resultado es:


PNAME | PRICE ------------+-------Cerrojos | 15 Levas | 25

Ntese que la SELECT SQL corresponde a la "proyeccin" en lgebra relaciona, no a la "seleccin" (vea lgebra Relacional para ms detalles). Las cualificaciones en la clausula WHERE pueden tambin conectarse lgicamente utilizando las palabras claves OR, AND, y NOT:
SELECT PNAME, PRICE FROM PART WHERE PNAME = 'Cerrojos' AND (PRICE = 0 OR PRICE < 15);

dar como resultado:


PNAME | PRICE ------------+-------Cerrojos | 15

Las operaciones aritmticas se pueden utilizar en la lista de objetivos y en la clausula WHERE. Por ejemplo, si queremos conocer cuanto cuestan si tomamos dos piezas de un artculo, podramos utilizar la siguiente consulta:
SELECT PNAME, PRICE * 2 AS DOUBLE FROM PART WHERE PRICE * 2 < 50;

y obtenemos:
PNAME | DOUBLE ------------+--------Tornillos | 20

Tuercas Cerrojos

| |

16 30

Ntese que la palabra DOBLE tras la palabra clave AS es el nuevo ttulo de la segunda columna. Esta tcnica puede utilizarse para cada elemento de la lista objetivo para asignar un nuevo ttulo a la columna resultante. Este nuevo ttulo recibe el calificativo de "un alias". El alias no puede utilizarse en todo el resto de la consulta.
Joins (Cruces)

El siguiente ejemplo muestra como las joins (cruces) se realizan en SQL. Para cruzar tres tablas SUPPLIER, PART y SELLS a travs de sus atributos comunes, formularemos la siguiente instruccin:
SELECT S.SNAME, P.PNAME FROM SUPPLIER S, PART P, SELLS SE WHERE S.SNO = SE.SNO AND P.PNO = SE.PNO;

y obtendremos la siguiente tabla como resultado:


SNAME | PNAME -------+------Smith | Tornillos Smith | Tuercas Jones | Levas Adams | Tornillos Adams | Cerrojos Blake | Tuercas Blake | Cerrojos Blake | Levas

En la clausula FROM hemos introducido un alias al nombre para cada relacin porque hay atributos con nombre comn (SNO y PNO) en las relaciones. Ahora podemos distinguir entre los atributos con nombre comn simplificando la adiccin de un prefijo al nombre del atributo con el nombre del alias seguido de un punto. La join se calcula de la misma forma, tal como se muestra en Una Inner Join (Una Join Interna). Primero el producto cartesiano: SUPPLIER PART SELLS Ahora seleccionamos nicamente aquellas tuplas que satisfagan las condiciones dadas en la clausula WHERE (es decir, los atributos con nombre comn deben ser iguales). Finalmente eliminamos las columnas repetidas (S.SNAME, P.PNAME).

Operadores Agregados

SQL proporciona operadores agregados (como son AVG, COUNT, SUM, MIN, MAX) que toman el nombre de un atributo como argumento. El valor del operador agregado se calcula sobre todos los valores de la columna especificada en la tabla completa. Si se especifican grupos en la consulta, el clculo se hace slo sobre los valores de cada grupo (vean la siguiente seccin). Ejemplo 5. Aggregates Si queremos conocer el coste promedio de todos los artculos de la tabla PART, utilizaremos la siguiente consulta:
SELECT AVG(PRICE) AS AVG_PRICE FROM PART;

El resultado es:
AVG_PRICE ----------14.5

Si queremos conocer cuantos artculos se recogen en la tabla PART, utilizaremos la instruccin:


SELECT COUNT(PNO) FROM PART;

y obtendremos:
COUNT ------4

Agregacin por Grupos

SQL nos permite particionar las tuplas de una tabla en grupos. En estas condiciones, los operadores agregados descritos antes pueden aplicarse a los grupos (es decir, el valor del operador agregado no se calculan sobre todos los valores de la columna especificada, sino sobre todos los valores de un grupo. El operador agregado se calcula individualmente para cada grupo).

El particionamiento de las tuplas en grupos se hace utilizando las palabras clave GROUP BY seguidas de una lista de atributos que definen los grupos. Si tenemos GROUP BY A1, , Ak habremos particionado la relacin en grupos, de tal modo que dos tuplas son del mismo grupo si y slo si tienen el mismo valor en sus atributos A1, , Ak. Ejemplo 6. Agregados Si queremos conocer cuntos artculos han sido vendidos por cada proveedor formularemos la consulta:
SELECT S.SNO, S.SNAME, COUNT(SE.PNO) FROM SUPPLIER S, SELLS SE WHERE S.SNO = SE.SNO GROUP BY S.SNO, S.SNAME;

y obtendremos:
SNO | SNAME | COUNT -----+-------+------1 | Smith | 2 2 | Jones | 1 3 | Adams | 2 4 | Blake | 3

Demos ahora una mirada a lo que est ocurriendo aqu. Primero, la join de las tablas SUPPLIER y SELLS:
S.SNO | S.SNAME | SE.PNO -------+---------+-------1 | Smith | 1 1 | Smith | 2 2 | Jones | 4 3 | Adams | 1 3 | Adams | 3 4 | Blake | 2 4 | Blake | 3 4 | Blake | 4

Ahora particionamos las tuplas en grupos reuniendo todas las tuplas que tiene el mismo atributo en S.SNO y S.SNAME:
S.SNO | S.SNAME | SE.PNO -------+---------+-------1 | Smith | 1 | 2 --------------------------

2 | Jones | 4 -------------------------3 | Adams | 1 | 3 -------------------------4 | Blake | 2 | 3 | 4

En nuestro ejemplo, obtenemos cuatro grupos y ahora podemos aplicar el operador agregado COUNT para cada grupo, obteniendo el resultado total de la consulta dada anteriormente. Ntese que para el resultado de una consulta utilizando GROUP BY y operadores agregados para dar sentido a los atributos agrupados, debemos primero obtener la lista objetivo. Los dems atributos que no aparecen en la clausula GROUP BY se seleccionarn utilizando una funcin agregada. Por otro lado, no se pueden utilizar funciones agregadas en atributos que aparecen en la clausula GROUP BY.
Having

La clausula HAVING trabaja de forma muy parecida a la clausula WHERE, y se utiliza para considerar slo aquellos grupos que satisfagan la cualificacin dada en la misma. Las expresiones permitidas en la clausula HAVING deben involucrar funcionen agregadas. Cada expresin que utilice slo atributos planos deber recogerse en la clausula WHERE. Por otro lado, toda expresin que involucre funciones agregadas debe aparecer en la clausula HAVING. Ejemplo 7. Having Si queremos solamente los proveedores que venden ms de un artculo, utilizaremos la consulta:
SELECT S.SNO, S.SNAME, COUNT(SE.PNO) FROM SUPPLIER S, SELLS SE WHERE S.SNO = SE.SNO GROUP BY S.SNO, S.SNAME HAVING COUNT(SE.PNO) > 1;

y obtendremos:
SNO | SNAME | COUNT -----+-------+------1 | Smith | 2 3 | Adams | 2

| Blake |

Subconsultas

En las clausulas WHERE y HAVING se permite el uso de subconsultas (subselects) en cualquier lugar donde se espere un valor. En este caso, el valor debe derivar de la evaluacin previa de la subconsulta. El uso de subconsultas ampla el poder expresivo de SQL. Ejemplo 8. Subselect Si queremos conocer los artculos que tienen mayor precio que el artculo llamado 'Tornillos', utilizaremos la consulta:
SELECT * FROM PART WHERE PRICE > (SELECT PRICE FROM PART WHERE PNAME='Tornillos');

El resultado ser:
PNO | PNAME | PRICE -----+-------------+-------3 | Cerrojos | 15 4 | Levas | 25

Cuando revisamos la consulta anterior, podemos ver la palabra clave SELECT dos veces. La primera al principio de la consulta - a la que nos referiremos como la SELECT externa - y la segunda en la clausula WHERE, donde empieza una consulta anidada - nos referiremos a ella como la SELECT interna. Para cada tupla de la SELECT externa, la SELECT interna deber ser evaluada. Tras cada evaluacin, conoceremos el precio de la tupla llamada 'Tornillos', y podremos chequear si el precio de la tupla actual es mayor. Si queremos conocer todos los proveedores que no venden ningn artculo (por ejemplo, para poderlos eliminar de la base de datos), utilizaremos:
SELECT * FROM SUPPLIER S WHERE NOT EXISTS (SELECT * FROM SELLS SE WHERE SE.SNO = S.SNO);

En nuestro ejemplo, obtendremos un resultado vaco, porque cada proveedor vende al menos un artculo. Ntese que utilizamos S.SNO de la SELECT externa en la clausula WHERE de la SELECT interna. Como hemos descrito antes, la subconsulta se evala para cada tupla de la consulta externa, es decir, el valor de S.SNO se toma siempre de la tupla actual de la SELECT externa.
Unin, Interseccin, Excepcin

Estas operaciones calculan la unin, la interseccin y la diferencia de la teora de conjuntos de las tuplas derivadas de dos subconsultas. Ejemplo 9. Union, Intersect, Except La siguiente consulta es un ejemplo de UNION:
SELECT S.SNO, FROM SUPPLIER WHERE S.SNAME UNION SELECT S.SNO, FROM SUPPLIER WHERE S.SNAME S.SNAME, S.CITY S = 'Jones' S.SNAME, S.CITY S = 'Adams';

Dar el resultado:
SNO | SNAME | CITY -----+-------+-------2 | Jones | Paris 3 | Adams | Vienna

Aqu tenemos un ejemplo para INTERSECT:


SELECT S.SNO, FROM SUPPLIER WHERE S.SNO > INTERSECT SELECT S.SNO, FROM SUPPLIER WHERE S.SNO > S.SNAME, S.CITY S 1 S.SNAME, S.CITY S 2;

que dar como resultado:


SNO | SNAME | CITY -----+-------+-------2 | Jones | Paris La nica tupla devuelta por ambas partes de la consulta es la nica que tiene $SNO=2$.

Finalmente, un ejemplo de EXCEPT:


SELECT S.SNO, FROM SUPPLIER WHERE S.SNO > EXCEPT SELECT S.SNO, FROM SUPPLIER WHERE S.SNO > S.SNAME, S.CITY S 1 S.SNAME, S.CITY S 3;

que dar como resultado:


SNO | SNAME | CITY -----+-------+-------2 | Jones | Paris 3 | Adams | Vienna

Definicin de Datos
El lenguaje SQL incluye un conjunto de comandos para definicin de datos.
Create Table

El comando fundamental para definir datos es el que crea una nueva relacin (una nueva tabla). La sintaxis del comando CREATE TABLE es:
CREATE TABLE table_name (name_of_attr_1 type_of_attr_1 [, name_of_attr_2 type_of_attr_2 [, ...]]);

Ejemplo 10. Creacin de una tabla Para crear las tablas definidas en La Base de Datos de Proveedores y Artculos se utilizaron las siguientes instrucciones de SQL:
CREATE TABLE SUPPLIER (SNO INTEGER, SNAME VARCHAR(20), CITY VARCHAR(20)); CREATE TABLE PART (PNO INTEGER, PNAME VARCHAR(20), PRICE DECIMAL(4 , 2));

CREATE TABLE SELLS (SNO INTEGER, PNO INTEGER);

Tipos de Datos en SQL

A continuacin sigue una lista de algunos tipos de datos soportados por SQL:

INTEGER: entero binario con signo de palabra completa (31 bits de precisin). SMALLINT: entero binario con signo de media palabra (15 bits de precisin). DECIMAL (p[,q]): nmero decimal con signo de p dgitos de precisin, asumiendo q a la derecha para el punto decimal. (15 p qq 0). Si q se omite, se asume que vale 0. FLOAT: numrico con signo de doble palabra y coma flotante. CHAR(n): cadena de caracteres de longitud fija, de longitud n. VARCHAR(n): cadena de caracteres de longitud variable, de longitud mxima n.

Create Index

Se utilizan los ndices para acelerar el acceso a una relacin. Si una relacin R tiene un ndice en el atributo A podremos recuperar todas la tuplas t que tienen t(A) = a en un tiempo aproximadamente proporcional al nmero de tales tuplas t ms que en un tiempo proporcional al tamao de R. Para crear un ndice en SQL se utiliza el comando CREATE INDEX. La sintaxis es:
CREATE INDEX index_name ON table_name ( name_of_attribute );

Ejemplo 11. Create Index Para crear un ndice llamado I sobre el atributo SNAME de la relacin SUPPLIER, utilizaremos la siguiente instruccin:
CREATE INDEX I ON SUPPLIER (SNAME);

El ndice creado se mantiene automticamente. es decir, cada vez que una nueva tupla se inserte en la relacin SUPPLIER, se adaptar el ndice I. Ntese que el nico cambio que un usuario puede percibir cuando se crea un ndice es un incremento en la velocidad.
Create View

Se puede ver una vista como una tabla virtual, es decir, una tabla que no existe fsicamente en la base de datos, pero aparece al usuario como si existiese. Por contra, cuando hablamos de una tabla base, hay realmente un equivalente almacenado para cada fila en la tabla en algn sitio del almacenamiento fsico. Las vistas no tienen datos almacenados propios, distinguibles y fsicamente almacenados. En su lugar, el sistema almacena la definicin de la vista (es decir, las reglas para acceder a las tablas base fsicamente almacenadas para materializar la vista) en algn lugar de los catlogos del sistema (vea System Catalogs). Para una discusin de las diferentes tcnicas para implementar vistas, refirase a SIM98. En SQL se utiliza el comando CREATE VIEW para definir una vista. La sintaxis es:
CREATE VIEW view_name AS select_stmt

donde select_stmt es una instruccin select vlida, como se defini en Select. Ntese que select_stmt no se ejecuta cuando se crea la vista. Simplemente se almacena en los catlogos del sistema y se ejecuta cada vez que se realiza una consulta contra la vista. Sea la siguiente definicin de una vista (utilizamos de nuevo las tablas de La Base de Datos de Proveedores y Artculos ):
CREATE VIEW London_Suppliers AS SELECT S.SNAME, P.PNAME FROM SUPPLIER S, PART P, SELLS SE WHERE S.SNO = SE.SNO AND P.PNO = SE.PNO AND S.CITY = 'London';

Ahora podemos utilizar esta relacin virtual London_Suppliers como si se tratase de otra tabla base:

SELECT * FROM London_Suppliers WHERE P.PNAME = 'Tornillos';

Lo cual nos devolver la siguiente tabla:


SNAME | PNAME -------+---------Smith | Tornillos

Para calcular este resultado, el sistema de base de datos ha realizado previamente un acceso oculto a las tablas de la base SUPPLIER, SELLS y PART. Hace esto ejecutando la consulta dada en la definicin de la vista contra aquellas tablas base. Tras eso, las cualificaciones adicionales (dadas en la consulta contra la vista) se podrn aplicar para obtener la tabla resultante.
Drop Table, Drop Index, Drop View

Se utiliza el comando DROP TABLE para eliminar una tabla (incluyendo todas las tuplas almacenadas en ella):
DROP TABLE table_name;

Para eliminar la tabla SUPPLIER, utilizaremos la instruccin:


DROP TABLE SUPPLIER;

Se utiliza el comando DROP INDEX para eliminar un ndice:


DROP INDEX index_name;

Finalmente, eliminaremos una vista dada utilizando el comando DROP VIEW:


DROP VIEW view_name;

Manipulacin de Datos

Insert Into

Una vez que se crea una tabla (vea Create Table), puede ser llenada con tuplas mediante el comando INSERT INTO. La sintaxis es:
INSERT INTO table_name (name_of_attr_1 [, name_of_attr_2 [,...]]) VALUES (val_attr_1 [, val_attr_2 [, ...]]);

Para insertar la primera tupla en la relacin SUPPLIER (de La Base de Datos de Proveedores y Artculos) utilizamos la siguiente instruccin:
INSERT INTO SUPPLIER (SNO, SNAME, CITY) VALUES (1, 'Smith', 'London');

Para insertar la primera tupla en la relacin SELLS, utilizamos:


INSERT INTO SELLS (SNO, PNO) VALUES (1, 1);

Update

Para cambiar uno o ms valores de atributos de tuplas en una relacin, se utiliza el comando UPDATE. La sintaxis es:
UPDATE table_name SET name_of_attr_1 = value_1 [, ... [, name_of_attr_k = value_k]] WHERE condition;

Para cambiar el valor del atributo PRICE en el artculo 'Tornillos' de la relacin PART, utilizamos:
UPDATE PART SET PRICE = 15 WHERE PNAME = 'Tornillos';

El nuevo valor del atributo PRICE de la tupla cuyo nombre es 'Tornillos' es ahora 15.

Delete

Para borrar una tupla de una tabla particular, utilizamos el comando DELETE FROM. La sintaxis es:
DELETE FROM table_name WHERE condition;

Para borrar el proveedor llamado 'Smith' de la tabla SUPPLIER, utilizamos la siguiente instruccin:
DELETE FROM SUPPLIER WHERE SNAME = 'Smith';

System Catalogs
En todo sistema de base de datos SQL se emplean catlogos de sistema para mantener el control de qu tablas, vistas, ndices, etc estn definidas en la base de datos. Estos catlogos del sistema se pueden investigar como si de cualquier otra relacin normal se tratase. Por ejemplo, hay un catlogo utilizado para la definicin de vistas. Este catlogo almacena la consulta de la definicin de la vista. Siempre que se hace una consulta contra la vista, el sistema toma primero la consulta de definicin de la vista del catlogo y materializa la vista antes de proceder con la consulta del usuario (vea SIM98 para obtener una descripcin ms detallada). Dirjase aDATE para obtener ms informacin sobre los catlogos del sistema.

SQL Embebido
En esta seccin revisaremos como se puede embeber SQL en un lenguaje de host (p.e. C). Hay dos razones principales por las que podramos querer utilizar SQLdesde un lenguaje de host:

Hay consultas que no se pueden formular utilizando SQL puro (por ejemplo, las consultas recursivas). Para ser capaz de realizar esas consultas necesitamos un lenguaje de host de mayor poder expresivo que SQL. Simplemente queremos acceder a una base de datos desde una aplicacin que est escrita en el lenguaje del host (p.e. un sistema de reserva de billetes con una interface grfica escrita en C, y la informacin sobre los billetes est almacenada en una base de datos que puede accederse utilizando SQL embebido).

Un programa que utiliza SQL embebido en un lenguaje de host consiste en instrucciones del lenguaje del host e instrucciones de SQL embebido (ESQL). Cada instruccin de ESQL empieza con las palabras claves EXEC SQL. Las instrucciones ESQL se transforman en instrucciones del lenguaje del host mediante un precompilador (que habitualmente inserta llamadas a rutinas de libreras que ejecutan los variados comandos de SQL). Cuando vemos los ejemplos de Select observamos que el resultado de las consultas es algo muy prximo a un conjunto de tuplas. La mayora de los lenguajes de host no estn diseados para operar con conjuntos, de modo que necesitamos un mecanismo para acceder a cada tupla nica del conjunto de tuplas devueltas por una instruccin SELECT. Este mecanismo puede ser proporcionado declarando un cursor. Tras ello, podemos utilizar el comando FETCH para recuperar una tupla y apuntar el cursor hacia la siguiente tupla.

13.2.10. Sintaxis de UPDATE


Sintaxis para una tabla:
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition] [ORDER BY ...] [LIMIT row_count]

Sintaxis para mltiples tablas:


UPDATE [LOW_PRIORITY] [IGNORE] table_references SET col_name1=expr1 [, col_name2=expr2 ...] [WHERE where_definition]

El comando UPDATE actualiza columnas en registros de tabla existentes con nuevos valores. La clusula SETindica qu columna modificar y los valores que puede recibir. La clusula WHERE , si se da, especifica qu registros deben actualizarse. De otro modo, se actualizan todos los registros. Si la clusula ORDER BY se especifica, los registros se actualizan en el orden que se especifica. La clusula LIMIT es el lmite de registros a actualizar. El comando UPDATE soporta los siguientes modificadores:

Si usa la palabra clave LOW_PRIORITY , la ejecucin de UPDATE se retrasa hasta que no haya otros clientes leyendo de la tabla.

Si usa la palabra clave IGNORE, el comando de actualizacin no aborta incluso si ocurren errores durante la actualizacin. Los registros que presenten conflictos de clave duplicada

no se actualizan. Los registros cuyas columnas se actualizan a valores que provocaran errores de conversin de datos se actualizan al valor vlido ms prximo. Si accede a una columna de tbl_name en una expresin, UPDATE usa el valora ctual de la columna. Por ejemplo, el siguiente comando pone la columna age a uno ms que su valor actual:
mysql> UPDATE persondata SET age=age+1;

Las asignaciones UPDATE se avalna de izquierda a derecha. Por ejemplo, el siguiente comando dobla la columnaage y luego la incrementa:
mysql> UPDATE persondata SET age=age*2, age=age+1;

Si pone en una columna el valor que tiene actualmente, MySQL se da cuenta y no la actualiza. Si actualiza una columna declarada como NOT NULL con un valor NULL, la columna recibe el valor por defecto apropiado para el tipo de la columna y se incrementa el contador de advertencias. El valor por defecto es 0 para tipos numricos, la cadena vaca ('') para tipos de cadena, y el valor cero para valores de fecha y hora.
UPDATE retorna el nmero de registros que se cambian. En MySQL 5.0, la

funcin mysql_info() de la API de C retorna el nmero de registros coincidentes actualizados y el nmero de advertencias que ocurren durante elUPDATE. Puede usar LIMIT row_count para restringir el alcance del UPDATE. Una clusula LIMIT es una restriccin de registros coincidentes. El comando para en cuanto encuentra row_count registos que satisfagan la clusulaWHERE , tanto si han sido cambiados como si no. Si un comando UPDATE incluye una clusula ORDER BY, los registros se actualizan en el orden especificado por la clusula. Puede realizar operaciones UPDATE que cubran varias tablas. La parte table_references lista las tablas involucradas en el join. Su sintaxis se describe mpliamente en Seccin 13.2.7.1, Sintaxis de JOIN. Aqu hay un ejemplo:
UPDATE items,month SET items.price=month.price WHERE items.id=month.id;

Este ejemplo muestra un inner join usando el operador coma, pero los comandos UPDATE de mltiples tablas pueden usar cualquier tipo de join permitido en comandos SELECT tales como LEFT JOIN. Nota: No puede usar ORDER BY o LIMIT con un UPDATE de mltiples tablas.

En MySQL 5.0, necesita el permiso UPDATE slo para columnas referenciadas en un UPDATE de mltiples tablas que se actualizan realmente. Necesita slo el permiso SELECT para algunas columnas que se leen pero no se modifican. Si usa un comando UPDATE de mltiples tablas que involucren tablas InnoDB con restricciones de claves forneas, el optimizador de MySQL puede procesar tablas en un orden distinto al de la relacin padre/hijo. En este caso, el comando fall y hace un roll back. En su lugar, actualice una nica tabla y confen en las capacidades de ON UPDATE que proporciona InnoDB para que el resto de tablas se modifiquen acrdemente. ConsulteSeccin 15.6.4, Restricciones (constraints) FOREIGN KEY. Actualmente, no puede actualizar una tabla y seleccionar de la misma en una subconsulta.

You might also like