22 julio 2021

2.8 Comandos generales de alta y baja del SGBD


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, las creaciones de las tablas en el proceso de 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.

A nivel de tabla: Refieren a una o a varias columnas, donde cada columna se define individualmente.

A nivel de Columna el nombre de la columna puede tener un máximo de 30 caracteres.

Del examen de la sintaxis de la sentencia CreateTable 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 de Oracle comercial soportan una gama mucho más amplia de tipos de datos.

Ejemplo: Considere la siguiente tabla de datos correspondientes a los campeones de Fórmula 1 (1950 - 2012) y sus escuderías. Y su traducción a sentencias Oracle.

CREATE   TABLE   f1   (yearINTEGER   PRIMARY   KEY,   campeonCHAR   (30),

escuderiaCHAR (20));

 Ejemplo: Estados, capitales, densidad de población y superficie de la República Mexicana

CREATE TABLE estados (idEstadoINTEGER PRIMARY KEY, nombreEstadoCHAR

(25) NOT NULL, capitalCHAR (25) NOT NULL, densidadINTEGER NOT NULL, poblacionINTEGER NOT NULL

);

 

Tablas Temporales

Oracle permite la creación de tablas temporales para mantener datos propios y exclusivos a una sesión Oracle determinada. Estos 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 tablas 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 sesión. Eso significa que los datos no se comparten entre sesiones y se eliminan al final de la misma.

CREATEGLOBAL       TEMPORARYTABLE        [        schema.        ]table        (

nombreColumnatipoDato [DEFAULT expresión] [NOT NULL], [, nombre_columnatipo_dato [DEFAULT expresión]

[Restricción columna] ... |restricción tabla]; ON COMMIT {DELETE| PRESERVE} ROWS [ physical_properties]

Con la opción ON COMMIT DELETE ROWS se borran los datos cada vez que se hace COMMIT en la sesión.

Con la opción ON PRESERVE DELETE ROWS los datos no se borran hasta el final de la sesión.

Sus ventajas son varias, la información contenida en ella esta solo disponible para la sesión actual, cualquier inserción, borrado, actualización solo se refleja en la sesión activa.

Muchas funcionalidades de cualquier tabla normal se mantienen en ella, como triggers a nivel tabla, vistas, índices, exportar e importar (claro solo la definición de la tabla).

No es posible declarar llaves foráneas 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 DROP TABLE.

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 arreglar colocando la sentencia CASCADE CONSTRAINTS.

Esto produce que las restricciones de la tabla detalle se borren antes de borrar la 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

Oracle permite modificar las restricciones definidas para una tabla. Esto puede llevar a “inconsistencia” de los datos ya introducidos en la base de datos. Por ello, Oracle tiene definidos mecanismos para modificación de los datos ya existentes. Esta operación se puede realizar con el comando ALTER TABLE.

Hay que tener en cuenta varios puntos:

No es posible disminuir el tamaño de la columna, si esta contiene datos

En modificaciones, todos los datos tanto nuevos como viejos deben de ser compatibles o la tabla debe de estar vacía.

La opción ADD NOT NULL solo será posible si la tabla está vacía

La opción MODIFI NOT NULL solo se podrá modificar siempre y cuando no se tenga un valor nulo o este vacía la columna en 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.

Es factible modificar una tabla añadiendo o eliminando restricciones, en este caso para el ejemplo anterior el comando a utilizar será

ALTER TABLE tabla {ADD | DROP} CONSTRAINT restricción; El cual permitirá el borrado en cascada.

Ahora veremos los comandos en: 

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 motor de almacenamiento MEMORY proporciona tablas en memoria. El motor de almacenamiento MERGE permite una colección de tablas MyISAM idénticas ser tratadas como una simple tabla. Como MyISAM, los motores de almacenamiento 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 Innoble y BDB proporcionan tablas transaccionales. BDB se incluye en la distribución binaria MySQL-Max en aquellos sistemas operativos que la soportan. InnoDB también se incluye por defecto en todas las distribuciones binarias de MySQL5.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.

NDB Cluster es el motor de almacenamiento usado por MySQL Cluster para implementar tablas que se particional 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ñadirá soporte para este motor de almacenamiento en otras plataformas, incluyendo Windows en pró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 clientes.

La versión 5 de MySQL crea por defecto tablas innoDB que permiten el manejo de integridad referencial, transacciones. Al igual que las tablas 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%';

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   (yearINTEGER   PRIMARY   KEY,   campeonCHAR   (30),

escuderiaCHAR (20)) ENGINE = InnoDB;

 Ejemplo: Estados, capitales, densidad de población y superficie de la República Mexicana

CREATE TABLE estados (idEstadoINTEGER PRIMARY KEY, nombreEstadoCHAR

(25) NOT NULL, capitalCHAR (25) NOT NULL, densidadINTEGER NOT NULL, poblacionINTEGER NOT NULL) 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 sintaxis es la siguiente DESCRIBE nombre Tabla.

DESCRIBE f1;

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.

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 término 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 ( ifeINTEGER (13) PRIMARY KEY, nombreCHAR (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 registro fija. MEMORY no soporta columnas BLOB o 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 ( ifeINTEGER (13) PRIMARY KEY, nombreCHAR (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 CREATE para la tabla. La sintaxis para MySQL es

 

ALTER [IGNORE] TABLEtbl_name alter_specification [, alter_specification] ...;

alter_specification:


ADD [COLUMN] column_definition [FIRST | AFTERcol_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_namecolumn_definition [FIRST|AFTERcol_name]

| MODIFY [COLUMN] column_definition [FIRST | AFTERcol_name]

| DROP [COLUMN] col_name

 | DROP PRIMARY KEY

 | DROP INDEXindex_name

 | DROP FOREIGN KEYfk_symbol

 | DISABLE KEYS

 | ENABLE KEYS

 | RENAME [TO] new_tbl_name

 | ORDER BYcol_name

| CONVERT TO CHARACTER SETcharset_name [COLLATEcollation_name]

 | [DEFAULT] CHARACTER SETcharset_name [COLLATEcollation_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

Ejemplo: Eliminar una llave foránea

 

ALTER TABLE automovil DROP FOREIGN KEY FK_Propietario; Ejemplo: Agregar una llave foranea con borrado en cascada

ALTER TABLEautomovil ADD CONSTRAINTFK_Propietario FOREIGN KEY (idPropietario) REFERENCES propietario (idPropietario) ON DELETE CASCADE; Puede ejecutar múltiples cláusulas ADD, ALTER, DROP, y CHANGE en un único comandoALTER TABLE. Esta es una extensión MySQL al estándar SQL, que permite sólo una de cada cláusula por comando ALTER TABLE.


No hay comentarios.:

Publicar un comentario