Opciones de tabla

La parte final de la sentencia CREATE TABLE permite especificar varias opciones para la tabla.

Sólo comentaremos la opción del motor de almacenamiento, para ver el resto en detalle se puede consultar la sintaxis en CREATE TABLE.

Motor de almacenamiento

La sintaxis de esta opción es:

{ENGINE|TYPE} = {BDB|HEAP|ISAM|InnoDB|MERGE|MRG_MYISAM|MYISAM }

Podemos usar indistintamente ENGINE o TYPE, pero la forma recomendada es ENGINE ya que la otra desaparecerá en la versión 5 de MySQL.

Hay seis motores de almacenamiento disponibles. Algunos de ellos serán de uso obligatorio si queremos tener ciertas opciones disponibles. Por ejemplo, ya hemos comentado que el soporte para claves foráneas sólo está disponible para el motor InnoDB. Los motores son:

  • BerkeleyDB o BDB: tablas de transacción segura con bloqueo de página.
  • HEAP o MEMORY: tablas almacenadas en memoria.
  • ISAM: motor original de MySQL.
  • InnoDB: tablas de transacción segura con bloqueo de fila y claves foráneas.
  • MERGE o MRG_MyISAM: una colección de tablas MyISAM usadas como una única tabla.
  • MyISAM: el nuevo motor binario de almacenamiento portable que reemplaza a ISAM.

Generalmente usaremos tablas MyISAM o tablas InnoDB.

A veces, cuando se requiera una gran optimización, creemos tablas temporales en memoria.

Verificaciones

Disponemos de varias sentencias para verificar o consultar características de tablas.

Podemos ver la estructura de una tabla usando la sentencia SHOW COLUMNS:

mysql> SHOW COLUMNS FROM gente;
+--------+-------------+------+-----+---------+-------+
| Field  | Type        | Null | Key | Default | Extra |
+--------+-------------+------+-----+---------+-------+
| nombre | varchar(40) | YES  |     | NULL    |       |
| fecha  | date        | YES  |     | NULL    |       |
+--------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)

mysql>

También podemos ver la instrucción usada para crear una tabla, mediante la sentencia SHOW CREATE TABLE:

mysql> show create table gente\G
*************************** 1. row ***************************
       Table: gente
Create Table: CREATE TABLE `gente` (
  `nombre` varchar(40) default NULL,
  `fecha` date default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)

mysql>

Usando '\G' en lugar de ';' la salida se muestra en forma de listado, en lugar de en forma de tabla. Este formato es más cómodo a la hora de leer el resultado.

La sentencia CREATE TABLE mostrada no tiene por qué ser la misma que se usó al crear la tabla originalmente. MySQL rellena las opciones que se activan de forma implícita, y usa siempre el mismo formato para crear claves primarias.

Eliminar una tabla

A veces es necesario eliminar una tabla, ya sea porque es más sencillo crearla de nuevo que modificarla, o porque ya no es necesaria.

Para eliminar una tabla se usa la sentencia DROP TABLE.

La sintaxis es simple:

DROP TABLE [IF EXISTS] tbl_name [, tbl_name] ...

Por ejemplo:

mysql> DROP TABLE ciudad6;
Query OK, 0 rows affected (0.75 sec)

mysql>

Se pueden añadir las palabras IF EXISTS para evitar errores si la tabla a eliminar no existe.

mysql> DROP TABLE ciudad6;
ERROR 1051 (42S02): Unknown table 'ciudad6'
mysql> DROP TABLE IF EXISTS ciudad6;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>

Eliminar una base de datos

De modo parecido, se pueden eliminar bases de datos completas, usando la sentencia DROP_DATABASE.

La sintaxis también es muy simple:

DROP DATABASE [IF EXISTS] db_name

Hay que tener cuidado, ya que al borrar cualquier base de datos se elimina también cualquier tabla que contenga.

mysql> CREATE DATABASE borrame;
Query OK, 1 row affected (0.00 sec)

mysql> USE borrame
Database changed
mysql> CREATE TABLE borrame (
    -> id INT,
    -> nombre CHAR(40)
    -> );
Query OK, 0 rows affected (0.09 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| borrame            |
| mysql              |
| prueba             |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> SHOW TABLES;
+-------------------+
| Tables_in_borrame |
+-------------------+
| borrame           |
+-------------------+
1 row in set (0.00 sec)

mysql> DROP DATABASE IF EXISTS borrame;
Query OK, 1 row affected (0.11 sec)

mysql> DROP DATABASE IF EXISTS borrame;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql>

Comentarios de los usuarios (3)

Luis Quiroga
2012-07-26 18:52:03

muy buenos los aportes. un problema ortografico, escribiste uso con h (ver apendice D Husos horarios en el indice curso MySQL)

Slds

Steven R. Davidson
2012-07-26 19:56:18

Hola Luis,

Me temo que no es un error gramatical. Existe la palabra "huso" (con hache). "Huso horario" se refiere a cada parte dividida en meridianos que tiene su propio horario. Podríamos usar el nombre de "zona horaria", pero ya tenemos el término: "huso horario".

Puedes mirar la definición de "huso" yendo a: http://lema.rae.es/drae/?val=huso

Espero haber aclarado la duda.

Steven

Manolo
2016-06-10 19:17:13

Es necesario usar el IF EXISTS ?