Un lenguaje de definición de datos (Data Definition Language, DDL por sus siglas en inglés) es un lenguaje proporcionado por e lsistema de gestión de base de datos que permite a los usuarios de la misma llevar a cabo las tareas de definición de las estructuras que almacenarán almacenarán los datos así como de los procedimientos o funciones que permitan consultarlos. El DDL (Data Definition Language) lenguaje de definición de datos es la parte del SQL que más varía de un sistema a otro ya que esa area tiene que ver con cómo se organizan internamente los datos y eso, cada sistema lo hace de una manera u otra.
2.1. Creación del esquema de la base de datos
El esquema de una base de datos (en inglés, Database Schema) describe la estructura de una Base de datos, en un lenguaje formal soportado soportado por un Sistema administrador administrador de Base de datos (DBMS). En una Base de datos Relacional, el Esquema define sus tablas, sus campos en cada tabla y las relaciones entre cada campo y cada tabla.
El esquema es generalmente generalmente almacenado en un Diccionario Diccionario de Datos. Aunque Aunque generalmente generalmente el esquema es definido en un lenguaje de Base de datos, el término se usa a menudo para referirse a una representación gráfica de la estructura de base de datos (Diseño de lógico de la base de datos).
Generalmente en la práctica el término esquema de la base de datos se refiere al diseño físico de la base de datos.
Oracl Oracle e gene general ralmen mente te asoci asocia a un 'user 'usernam name' e' como como esquem esquemas as en este este caso caso SYSTE SYSTEM M y HR (Recursos humanos).
Por Por otro otro lado lado MySQ MySQL L pres presen enta ta dos dos esqu esquem emas as information_schema y MySQL ambos guardan información sobre privilegios y procedimientos del gestor y no deben ser elimandos.
Sint Sintax axis is bási básica ca para para crea crearr una una base base de dato datos s en Orac Oracle le ( No express)
apli ap lica ca en Or Orac acle le
CREATE DATABASE nombre_baseDatos;
Sintaxis básica para crear una base de datos en MySQL
CREATE DATABASE IF NOT EXISTS nombre_baseDatos;
Para conocer las bases datos creadas use
SHOW DATABASES;
2.1 Creación de bases de datos
Una base de datos en un sistema relacional está compuesta por un conjunto de tablas, que corresponden a las relaciones del modelo relacional. En la terminología usada en SQL no se alude a las relaciones, del mismo modo que no se usa el término atributo, pero sí la palabra columna, y no se habla de tupla, sino de línea. A continuación se usarán indistintamente ambas terminologías, por lo que tabla estará en lugar de relación, columna en el de atributo y línea en el de tupla, y viceversa. Prácticamente, la creación de la base de datos consiste en la creación de las tablas que la componen. En realidad, antes de poder proceder a la creación de las tablas, normalmente hay que crear la base de datos, lo que a menudo significa definir un espacio de nombres separado para cada conjunto de tablas. De esta manera, para una DBMS se pueden gestionar diferentes bases de datos independientes al mismo tiempo sin que se den conflictos con los nombres que se usan en cada una de ellas. El sistema previsto por el estándar para crear los espacios separados de nombres consiste en usar las instrucciones SQL "CREATE SCHEMA". A menudo, dicho sistema no se usa (o por lo menos no con los fines y el significado previstos por el estándar), pero cada DBMS prevé un procedimiento propietario para crear una base de datos. Normalmente, se amplía el lenguaje SQL introduciendo una instrucción no prevista en el estándar: "CREATE DATABASE". DATABASE". La sintaxis empleada por PostgreSQL, pero también por las DBMS más difundidas, es la siguiente: CREATE DATABASE DATABASE nombre_base de datos Con PostgreSQL está a disposición una orden invocable por shell Unix (o por shell del sistema usado), que ejecuta la misma operación:
createdb nombre_base de datos Para crear nuestra base de datos bibliográfica, usaremos pues la orden: createdb biblio Una vez creada la base de datos, se pueden crear las tablas que la componen. La instrucción SQL propuesta para este fin es: CREATE TABLE TABLE nombre_tabla nombre_tabl a ( nombre_columna tipo_columna [ cláusula_defecto ] [ vínculos_de_columna ] [ , nombre_columna tipo_columna [ cláusula_defecto ] [ vínculos_de_columna ] ... ] [ , [ vínculo_de tabla] ... ] ) nombre_columna: nombre_columna : es el nombre de la columna que compone la tabla. Sería mejor no exagerar con la longitud de los identificadores de columna, puesto que SQL Entry Level prevé nombres con no más de 18 caracteres. Consúltese, de todos modos, la documentación de la base de datos específica. Los nombres tienen que comenzar con un carácter alfabético. tipo_columna: tipo_columna : es la indicación del tipo de dato que la columna podrá contener. Los principales tipos previstos por el estándar SQL son:
CHARACTER(n) Una cadena de longitud fija con exactamente n caracteres. CHARACTER se puede abreviar con CHAR
•
CHARACTER VARYING(n) Una cadena de longitud variable con un máximo de n caracteres. CHARACTER VARYING se puede abreviar con VARCHAR o CHAR VARYING.
•
INTEGER Un número estero con signo. Se puede abreviar con INT. La precisión, es decir el tamaño del número entero que se puede memorizar en una columna de este tipo, depende de la implementación de la DBMS en cuestión. •
SMALLINT Un número entero con signo y una precisión que no sea superior a INTEGER.
•
FLOAT(p) Un número con coma móvil y una precisión p. El valor máximo de p depende de la implementación de la DBMS. Se puede usar FLOAT sin indicar la precisión, empleando, por tanto, la precisión por defecto, también ésta dependiente de la implementación. REAL y DOUBLE PRECISION son sinónimo para un FLOAT con precisión concreta. También en este caso, las precisiones dependen de la implementación, siempre que la precisión del primero no sea superior a la del segundo.
•
DECIMAL(p,q) Un número con coma fija de por lo menos p cifras y signo, con q cifras después de la coma. DEC es la
•
abreviatura de DECIMAL. DECIMAL(p) es una abreviatura de DECIMAL(p,0). El valor máximo de p depende de la implementación. INTERVAL Un periodo de tiempo (años, meses, días, horas, minutos, segundos y fracciones de segundo).
•
DATE, TIME y TIMESTAMP Un instante temporal preciso. DATE permite indicar el año, el mes y el día. Con TIME se pueden especificar la hora, los minutos y los segundos. TIMESTAMP es la combinación de los dos anteriores. Los segundos son un número con coma, lo que permite especificar también fracciones de segundo.
•
cláusula_defecto : indica el valor de defecto que tomará la columna si no se le asigna uno explícitamente en el momento en que se crea la línea. La sintaxis que hay que usar es la siguiente: DEFAULT { valor | NULL } donde valor es un valor válido para el tipo con el que la columna se ha definido. vínculos_de_columna : son vínculos de integridad que se aplican a cada atributo concreto. Son:
•
NOT NULL, que indica que la columna no puede tomar el valor NULL.
PRIMARY KEY, que indica que la columna es la llave primaria de la tabla. una definición de referencia con la que se indica que la columna es una llave externa hacia la tabla y los campos indicados en la definición. La sintaxis es la siguiente:
• •
REFERENCES nombre_tabla [ ( columna1 [ , columna2 ... ] ) ] [ ON DELETE { CASCADE | SET DEFAULT | SET NULL } ] [ ON UPDATE { CASCADE | SET DEFAULT | SET NULL } ] Las cláusulas ON DELETE y ON UPDATE indican qué acción hay que ejecutar en el caso en que una tupla en la tabla referenciada sea eliminada o actualizada. De hecho, en dichos casos en la columna referenciante (que es la que se está definiendo) podría haber valores inconsistentes. Las acciones pueden ser: CASCADE: eliminar la tupla que contiene la columna referenciante (en el caso de ON DELETE) o también actualizar la columna referenciante (en el caso de ON UPDATE). o SET DEFAULT: asignar a la columna referenziante su valor de defecto. o
o
SET NULL: asignar a la columna referenciante el valor NULL.
un control de valor, con el que se permite o no asignar un valor a la columna en función del resultado de una expresión. La sintaxis que se usa es:
•
CHECK (expresión_condicional) donde expresión_condicional es una expresión que ofrece verdadero o falso.
Por ejemplo, si estamos definiendo la columna COLUMNA1, con el siguiente control: CHECK ( COLUMNA1 < 1000 ) en dicha columna se podrán incluir sólo valores inferiores a 1000. vínculo_de_tabla : son vínculos de integridad que se pueden referir a más columnas de la tabla. Son:
•
la definición de la l lave primaria:
PRIMARY KEY ( columna1 [ , columna2 ... ] ) Véase que en este caso, a diferencia de la definición de la llave primaria como vínculo de columna, ésta se puede formar con mas de un atributo. •
las definiciones de las llaves externas:
FOREIGN KEY ( columna1 [ , columna2 ... ] ) definiciones_de_referencia La definición_de_referencia tiene la misma sintaxis y significado que la que puede aparecer como vínculo de columna. un control de valor, con la misma sintaxis y significado que el que se puede usar como vínculo de columna. •
Para aclarar mejor el uso de la instrucción CREATE TABLE, veamos algunas órdenes que implementan la base de datos bibliográfica ejemplificada. CREATE TABLE Publication ( ID INTEGER INTEGE R PRIMARY KEY, type CHAR(18) NOT NULL ); La instrucción anterior crea la tabla Publication, formada por las dos columna ID de tipo INTEGER, y type de tipo CHAR(18). ID es la llave primaria de la relación. En el atributo type hay un vínculo de no nulidad. CREATE TABLE Book ( ID INTEGER PRIMARY KEY REFERENCES Publication(ID), title VARCHAR(160) NOT NULL, publisher INTEGER INTEGER NOT NOT NULL REFERENCE REFERENCES S Publisher(ID), Publisher(ID), volume VARCHAR(16), series VARCHAR(160), edition VARCHAR(16), pub_month pub_month CHAR(3), pub_year pub_year INTEGER NOT NULL, note VARCHAR(255)
); Crea la relación Book, formada por nueve atributos. La llave primaria es el atributo ID, que es también una llave externa hacia la relación Publication. Sobre los atributos title, publisher y pub_year hay vínculos de no nulidad. Además, el atributo publisher es una llave externa hacia la tabla Publisher. CREATE TABLE TABLE Author ( publicationID publicationID INTEGER INTEGER REFERENCES REFERENCES Publication(ID), Publication(ID), personID INTEGER INTEGER REFERENCES REFERENCES Person(ID), PRIMARY KEY (publicationID, personID) ); Crea la relación Author, compuesta por dos atributos: publicationID y personID. La llave primaria en este caso está formada por la combinación de los dos atributos, como está indicado por el vínculo de tabla PRIMARY KEY. PublicationID es una llave externa hacia la relación Publication, mientras que personID lo es hacia la relación Person. El archivo create_biblio.sql contiene todas las órdenes necesarias para crear la estructura de la base de datos bibliográfica ejemplificada. NOTA SOBRE POSTGRESQL En PotgreSQL, por lo menos hasta la versión 6.5.1, no se han implementado todavía los vínculos sobre las llaves externas. El parser acepta, de todos modos, las sintaxis SQL que le afectan, y por tanto los constructos FOREIGN KEY y REFERENCES no producen un error, sino sólo un warning.
2.2. Actualización, modificación y eliminación del esquema de base de datos
Oracle
Una tabla es un sistema de elementos de datos (atributo - valores) que se organizan que usando un modelo vertical - columnas (que son identificados por su nombre)- y horizontal filas. Una tabla tiene un número específico de columnas, pero puede tener cualquier número de filas. Cada fila es identificada por los valores que aparecen en un subconjunto particular de la columna que se ha identificado por una llave primaria.
Una tabla de una base de datos es similar en apariencia a una hoja de cálculo, en cuanto a que los datos se almacenan en filas y columnas. Como consecuencia, normalmente es bastante fácil importar una hoja de cálculo en una tabla de una base de datos. La principal diferencia entre almacenar los datos en una hoja de cálculo y hacerlo en una base de datos es la forma de organizarse los datos.
Por lo tanto, la creación de las tablas en el proceso de programación programación en Oracle juegan un papel muy importante. En el momento de crear las tablas se definen características a dos niveles: Tabla y Columna, como se muestra a continuación:
Refier eren en a una una o a vari varias as colu column mnas as,, dond donde e cada cada colu column mna a se defi define ne A ni nive vell de tab tabla la: Refi individualmente.
Nomb Nombre re de la tabl tabla a pued puede e ser ser de 1 a 30 cara caract cter eres es.. La tabl tabla a tien tiene e como como propietario al usuario que las crea. Por ejemplo EQUIPO. Nombre:
Propietario:
Hay que tener en cuenta también ciertas restricciones con los nombres de las tablas: longitud máxima de 30 caracteres, no puede haber nombres de tabla duplica duplicados dos,, deben deben comenza comenzarr con un carácte carácterr alfabét alfabético, ico, permitir permitir caracter caracteres es alfan alfanumé uméri ricos cos y el guión guión bajo bajo '_', '_', y Orac Oracle le no disti disting ngue ue entre entre mayúsc mayúscul ulas as y minúsculas. La tabla tiene como propietario al usuario que las crea En nuestro caso somos el
usuario ALUMNO. Otro Otro usuar usuario io que que desee desee usar usar nuestr nuestras as tablas tablas debe debe tener tener autorización para ello y hacer referencia a la tabla como ALUMNO.EQUIPO (propietario.tabla) Cantidad Columnas:
de
Una tabla puede tener un máximo de 254 columnas.
A nivel de Columna el nombre de la columna puede tener un máximo de 30 caracteres.
En Oracle Oracle podemos podemos implementar implementar diversos diversos tipos de tablas. tablas. A continu continuació ación n se presenta presenta una recompilación no exhaustiva de ellas. Tipo Tabla
Descripción
Son el mecanismo de almacenamiento de los datos en una base de datos Oracle. Contienen un conjunto fijo de columnas. Las columnas de una tabla Regular descr describe iben n los atrib atributo utos s de la entid entidad ad que que se repres represent enta a con la tabla. tabla. Cada Cada (heap) columna tiene un nombre y características específicas: tipo de dato y longitud, restricciones, etc. Un cluester proporciona un método opcional de almacenar datos de tabla. Un cluste clusterr está está compu compuest esto o de un grupo grupo de tabla tablas s que que compa comparte rten n los mismos mismos Clustered bloques de datos. Las tablas son agrupadas mediante columnas comunes. Aquí una tabla es almacenada en la estructura de un índice. Esto impone orden físico a las filas por si mismas. A diferencia de un heap, donde los datos son Index almacenados en donde caben, en una tabla IOT (Tabla Organizada por Indices) los datos son almacenados en el orden de la clave primaria. Es un esquema de organización de los datos con el cual podemos dividirla en múltiples objetos de almacenamientos llamados particiones de datos o rangos, dependiendo los valores puede ser dividido en uno o más columnas de la tabla. Particionadas Cada Cada part partici icion ones es de datos datos es almac almacena enado do separ separada adamen mente te.. Estos Estos objet objetos os almacenados pueden estar en diferentes tablespaces, en el mismo o en una combinación de ambos. Son tablas cuyos datos permanecerán en el sistema sólo durante el tiempo que dure la transacción o sesión involucrada. No obstante, al igual que para las Temporales tablas permanentes, la definición de las tablas temporales se almacena en las tablas del sistema.
La sintaxis del comando que permite crear un tabla es la siguiente:
Del examen de la sintaxis de la sentencia Create Table se pueden concluir que necesitamos conocer los distintos tipos de columna y las distintas restricciones que se pueden imponer al contenido de las columnas.
Existen varios tipos de datos en SQL. De esta manera, cada columna puede albergar una información de naturaleza distinta. Los tipos de datos más comunes y sus características en Oracle Express (10 Y 11g) se resumen en la siguiente tabla. Las versiones versiones de Oracle comercial soportan una gama mucho más amplia de tipos de datos.
Tipo de Dato
BLOB
Descripción Contien Contiene e datos datos binario binarios s con un tamaño tamaño máximo máximo de 4 gigabyt gigabytes. es. Los datos binarios nos van a permitir guardar en la base de datos archivos, imagenes, sonidos, etc ...
Casi siempre es preferible guardar la ruta del archivo en la base de datos en luga lugarr del del prop propio io arch archiv ivo o en modo modo bina binari rio, o, pero pero exis existe ten n cier cierta tas s circunstancias en las que no nos queda otra solución.
BINARY_DOUBLE BINARY_FLOAT
Presición doble Presición simple Un tipo de datos CLOB de Oracle contiene datos de caracteres basados en el juego juego de caract caractere eres s prede predeter termin minad ados os del del serv servido idorr. Su tamaño tamaño máximo es de 4 gigabytes. Se asigna a cadena.
CLOB
Use la siguiente expresión para una consulta de un campo CLOB
SELECT DBMS_LOB.substr(campo, DBMS_LOB.getlength(campo),1) FROM tablaprueba; CHAR
Almacena datos de tipo carácter alfanumérico alfanumérico de longitud fija, con un tamaño máximo de 2000. caracteres
Almacena fechas desde desde el 1-Ene-471 1-Ene-4712 2 AC hasta hasta el 31-Dic-4712 31-Dic-4712 DC. DC. Dato Datos s numér numérico icos s de n dígi dígito tos, s, de los los cual cuales es dec son son decima decimales les.. El NUMBER(dig [, dec]) tamaño máximo es de 38 dígitos. Almacena un valor alfanumérico alfanumérico de longitud variable en caracteres caracteres NVARCHAR2 Unicode con las mismas restricciones de varchar. Fecha y hora (incluidos los segundos), con un tamaño que abarca desde TIMESTAMP 7 a 11 bytes. Guarda datos de tipo carácter alfanumérico de longitud variable, con un VARCHAR2(tamaño) tamaño máximo de 4,000 caracteres. DATE
Ejemplo: Considere la siguiente tabla de datos correspondientes a los campeones de Formula 1 (1950 - 2012) y sus escuderias. Y su traducción a sentencias Oracle . Año
2012 2011 2010 2009 2008 2007 2006 2005 2004 2003 2002 2001 2000
Campeón
Sebastian Vettel Sebastian Vettel Jenson Button Lewis Hamilton Kimi Raikkonen Fernando Alonso Fernando Alonso Micha chael Schumac macher her Micha chael Schumac macher her Micha chael Schumac macher her Micha chael Schumac macher her Micha chael Schumac macher her
Escudería
Red Bull Racing Red Bull Racing Brawn GP McLaren Ferrari Renault Renault Ferra rrari Ferra rrari Ferra rrari Ferra rrari Ferra rrari
CREATE TABLE f1 ( INTEGER PRIMARY KEY , year CHAR (30), campeon escuderia CHAR (20) ); Ejemplo: Estados, capitales, densidad de población y superficie de la Republica Mexicana CREATE TABLE idEstado nombreEstado capital densidad poblacion );
estados ( INTEGER PRIMARY KEY , CHAR (25) NOT NULL, CHAR (25) NOT NULL, INTEGER NOT NULL, INTEGER NOT NULL
Tablas Temporales Oracle permite la creación de tablas temporales para mantener datos propios y exclusivos a una sesión Oracle determinada. determinada. Estos datos permanecerán en el sistema sólo durante el tiempo que dure la transacción o sesión involucrada. involucrada. No obstante, al igual que para las tablas permanentes, permanentes, la definición de las tablas temporales se almacena en las tablas del sistema.
La siguiente sintaxis permite crear una tabla temporal personal para cada sesion. Eso significa que los datos no se comparten entre sesiones y se eliminan al final de la misma.
nombreColumna tipoDato [ [,nombre_columna tipo_dato [ [restricción_columna] ... |restricción_tabla]; { | } [ physical_properties ]
[ schema. ]table ( expresión] [ expresión]
],
]
Con Con la opc opcion ion ON CO COMM MMIT IT DE DELE LETE TE RO ROWS WS se borran los datos cada vez que se hace COMMIT en la sesion. Con la opcion ON PRESERVE DELETE ROWS los datos no se borran hasta el final de la sesion.
Sus ventajas son varias, la información contenida en ella esta solo disponible para la sesión actual, cualquier inserción, borrado, actualizaciónsolo se refleja en la sesión activa.
Muchas funcionalidades de cualquier tabla normal se mantienen en ella, como triggers a nivel tabla, vistas, indices, exportar e importar (claro solo la definición de la tabla).
No es posible declarar llaves foraneas en una tabla temporal.
(DROP) Eliminación
Cuando una tabla ya no es útil y no vamos a volver a necesitarla debe ser borrada. Esta operación se puede realizar con el comando DROPTABLE.
DROP TABLE nombre_tabla [CASCADE CONSTRAINTS][PURGE]
Se borra la tabla de la base de datos, borrando toda la información contenida en la tabla, es decir, todas las filas. También se borrará toda la información que sobre la tabla existiera en el diccionario.
Si alguna columna de la tabla a borrar sirve como clave ajena de alguna tabla detalle, impide la eliminación de la tabla, ya que existe una restricción que requiere de la existencia de la tabla maestra. Esto se puede areglar colocando la sentencia CASCADE CONSTRAINTS .
Esto Esto prod produce uce que las restr restricc iccion iones es de la tabla tabla deta detalle lle se borre borren n antes antes de borra borrarr la tabla tabla maestra. PURGE evita que los objetos borrados se vayan a la papelera
La siguiente sentencia produce la eliminación de la tabla BORRAME.
Modificación
Oracl Oracle e permi permite te modifi modifica carr las restri restricc ccio iones nes defini definidas das para para una una tabla. tabla. Esto Esto pued puede e lleva llevarr a “inconsistencia” de los los datos datos ya intro introduc ducido idos s en la base base de datos. datos. Por ello, ello, Oracle Oracle tiene tiene definidos mecanismos para modificación de los datos ya existentes.
Esta operación se puede realizar con el comando ALTER TABLE. ALTER TABLE [esquema.]tabla clausula_constraint [,…] [ENABLE claus clausula ula_ac _activ tiva a | DISABLE clausula_disable] [{ENABLE|DISABLE} TABLE LOCK] [{ENABLE|DISABLE} ALL TRIGGERS];
Hay que tener en cuenta varios puntos:
No es posible disminuir el tamaño de una columna, si esta contiene datos. En las modificaciones, los tipos anterior y nuevo deben ser compatibles, o la tabla debe estar vacía La opción ADD ... NOT NULL sólo será posible si la tabla está vacía. La opción MODIFY ... NOT NULL sólo podrá realizarse cuando la tabla no contenga ninguna fil cuestión.
Considere el ejemplo Propietario - Automóvil, bajo el criterio de hacienda del Gobierno del Estado de Veracruz, México. Modificaremos el ejemplo para añadir el atributo color .
(color
automovil (15)
); Descargar
Es factible factible modificar modificar una tabla añadien añadiendo do o eliminand eliminando o restricc restriccione iones, s, en este caso para el ejemplo anterior el comando a utilizar será
ALTER TABLE
tabla
{ADD | DROP} CONSTRAINT
restricción;
ALTER TABLE automovil DROP CONSTRAINT FK_Propietario; automovil FK_Propietario (idPropietario) propietario (idPropietario)
El cual permitira el borrado en cascada.
MySQL
MySQL soporta varios motores de almacenamiento que tratan con distintos tipos de tabla. Los motores de almacenamiento de MySQL incluyen algunos que tratan con tablas transaccionales y otros que no lo hacen:
MyISAM trata tablas no transaccionales. Proporciona almacenamiento y recuperación de datos rápida, así como posibilidad de búsquedas fulltext.MyISAM se soporta en todas las
•
configuraciones MySQL, y es el motor de almacenamiento por defecto a no ser que tenga una configuración distinta a la que viene por defecto con MySQL.
El moto motorr de alma almac cenam enamie ient nto o MEMORY prop roporcio ciona tab tablas en mem memoria oria.E .Ell mot motor de almacenamiento MERGE permite una colección de tablas MyISAM idénticas ser tratadas como una simple tabla. Como Como MyISAM, los motores motores de almacen almacenamie amiento nto MEMORY y MERGE tratan tablas no transaccionales y ambos se incluyen en MySQL por defecto. Nota: El motor de almacenamiento MEMORY anteriormente se conocía como HEAP. Los motores de almacenamiento InnoDB y BDB proporcionan tablas transaccionales. BDB •
se incl incluy uye e en la dist distri ribu buci ción ón binar binaria ia MySQ MySQLL-Max Max en aquel aquellos los sist sistem emas as opera operati tivo vos s que la soportan. InnoDB también se incluye por defecto en todas las distribuciones binarias de MySQL 5.0 . En distribuciones fuente, puede activar o desactivar estos motores de almacenamiento configurando MySQL a su gusto. El motor de almacenamiento EXAMPLE es un motor de almacenamiento ' tonto' que no
•
hace nada. Puede crear tablas con este motor, pero no puede almacenar datos ni recuperarlos. El objetivo es que sirva como ejemplo en el código MySQL para ilustrar cómo escribir un motor de almacenamiento. Como tal, su interés primario es para desarrolladores. motorr de alma almace cena nami mien ento to usad usado o por por MySQ MySQL L Clus Cluste terr para para NDB Clu Cluste ster r es el moto
•
implementar tablas que se particionan en varias máquinas. Está disponible en distribuciones binarias MySQL-Max 5.0. Este motor de almacenamiento está disponible para linux, Solaris, y Mac OS X. Los autores mencionan que se añnadirá soporte para este motor de almacenamiento en otras plataformas, incluyendo Windows en p róximas versiones. El motor de almacenamiento ARCHIVE se usa para guardar grandes cantidades de datos
•
sin índices con una huella muy pequeña. El motor de almacenamiento CSV guarda datos en archivos de texto usando formato de
•
valores separados por comas. El motor de almacenamiento FEDERATED se añadió en MySQL 5.0.3. Este motor guarda
•
datos en una base de datos remota. En esta versión sólo funciona con MySQL a través de la API MySQL C Client. En futuras versiones, será capaz de conectar con otras fuentes de datos usando otros drivers o métodos de conexión cone xión clientes.
La versión 5 de MySQL crea por defecto tablas innoDB que permiten el manejo de integridad referencial, referencial, transacciones. transacciones. Al igual que las tablas regulares regulares de oracle. Para saber si el gestor de base de datos de MySQL que tenemos las soporta es necesario ejecutar la siguiente sentencia. SHOW VARIABLES liKE '%innodb%';
Ejecutar Si nuestro gestor soporta por defecto las tablas innodb las sentencias para crear las tablas previamente mostradas serán exactamente igual a las de oracle. En caso contrario se muestra la sintaxis correspondiente CREATE TABLE f1 ( INTEGER PRIMARY KEY , year CHAR (30), campeon escuderia CHAR (20) ) ENGINE = InnoDB; Ejemplo: Estados, capitales, densidad de población y superficie de la Republica Mexicana CREATE TABLE estados ( INTEGER PRIMARY KEY , idEstado nombreEstado CHAR (25) NOT NULL, CHAR (25) NOT NULL, capital INTEGER NOT NULL, densidad INTEGER NOT NULL poblacion ) ENGINE = InnoDB;
Comando Describe
MySQL proporciona este comando que resulta útil para conocer la estructura de una tabla, las columnas que la forman y su tipo y restricciones. La sintásis es la siguiente DESCRIBE nombreT nombreTabla abla. DESCRIBE f1;
Ejecutar
Comando SHOW TABLES y SHOW CREATE TABLE
El comando SHOW TABLES muestra las tablas dentro de una base de datos y SHOW CREATE TABLES muestra la estructura de creación de la tabla. Descargar Ejecutar
Tablas temporales
Las tablas temporales solo existen mientras la sesión está viva . Si se corre este código en un script de PHP ( Cualquier otro lenguaje), la tabla temporal se destruirá automáticamente al termino de la ejecución de la página. Si no específica MEMORY, la tabla se guardará por defecto en el disco.
CREATE TEMPORARY TABLE temporal ( INTEGER(13) PRIMARY KEY , ife nombre CHAR (30) NOT NULL UNIQUE ); •
Este tipo de tabla solo puede ser usada por el usuario que la crea.
•
Si creamos una tabla que tiene el mismo nombre que una existente en la base de datos, la
que existe quedará oculta y trabajaremos sobre la temporal.
Tablas Memory ( Head )
•
Se almacenan en memoria
•
Una tabla head no puede tener más de 1600 campos
•
Las tablas MEMORY usan una longitud de reg istro fija.
•
MEMORY no soporta columnas BLOB o TEXT. TEXT.
•
MEMORY en MySQL 5.0 incluye soporte para columnas AUTO_INCREMENT e índices en
columnas que contengan valores NULL.
•
Las tablas MEMORY se comparten entre todos los clientes (como cualquier otra tabla no-
TEMPORARY).
CREATE TEMPORARY TABLE temporal ( INTEGER(13) PRIMARY KEY , ife nombre CHAR (30) NOT NULL UNIQUE ) ENGINE = MEMORY;
Modificación
Esta operación se puede realizar con el comando ALTER TABLE . Para usar ALTER TABLE, necesita permisos ALTER, INSERT y CREATEpara la tabla. La sintaxis para MySQL es
ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ...; alter_specification: ADD [COLUMN] column_definition [ FIRST | AFTER col_name ] | ADD [COLUMN] (column_definition,...) | ADD INDEX [index_name] [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...) | ADD [CONSTRAINT [symbol]] UNIQUE [index_name] [index_type] (index_col_name,...) | ADD [FULLTEXT|SPATIAL] [index_name] (index_col_name,...) | ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...) [reference_definition] | ALTER [COLUMN] col_name { SET DEFAULT literal | DROP DEFAULT} | CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name] | MODIFY [COLUMN] column_definition [ FIRST | AFTER col_name] | DROP [COLUMN] col_name | DROP PRIMARY KEY | DROP INDEX index_name | DROP FOREIGN KEY fk_symbol | DISABLE KEYS | ENABLE KEYS
| | | | | | |
RENAME [TO] new_tbl_name ORDER BY col_name CONVERT TO CHARACTER SET charset_name [ COLLATE collation_name] [DEFAULT] CHARACTER SET charset_name [ COLLATE collation_name] DISCARD TABLESPACE IMPORT TABLESPACE table_options
Considere el ejemplo Propietario - Automóvil, bajo el criterio de hacienda del Gobierno del Estado de Veracruz, México. Modificaremos el ejemplo para añadir el atributo color según la sintaxis MySQL
(color
automovil (15)
); Descargar
Ejemplo: Eliminar una llave foranea ALTER TABLE automovil DROP FOREIGN KEY FK_Propietario;
Ejemplo: Agregar una llave foranea con borrado en cascada
ALTER TABLE automovil ADD CONSTRAINT FK_Propietario FOREIGN KEY (idPropietario) REFERENCES propietario (idPropietario) ON DELETE CASCADE;
Puede ejec jecuta utar múlt múltip iple les s clá cláusul sulas ADD, ALTER, DROP, y CHANGE en un único comando ALTER TABLE. Esta es una extensión MySQL al estándar SQL, que permite sólo una de cada cláusula por comando ALTER TABLE.