Ver índice
Creación de tablas

        Ocultar índice  

   Índice de contenidos
   Instalación en Windows
   Instalación en Ubuntu
   Servidores seguros
   Páginas dinámicas
   Sintaxis básica
   Operaciones
   Arrays
   Formatos de presentación
   Operadores
   Bucles
   Extraer y ord. información
   Funciones
   Ficheros externos
   Imágenes dinámicas
   Gestión de directorios
   Cookies y sesiones
   Clases y objetos
   Ficheros en formato PDF
   Bases de datos MySQL
   PHP y XML
   PDO - Bases SQLite / MySQL
   MySQL a traves de misqli
   Algo de JavaScript y AJAX


Tipos de tablas

MySQL permite usar diferentes tipos de tablas tales como: ISAM, MyISAM o InnoDB.

Las tablas ISAM (Indexed Sequential Access Method) son las de formato más antiguo. Están limitadas a tamaños que no superen los 4 gigas y no permite copiar tablas entre máquinas con distinto sistema operativo.

Las tablas MyISAM son el resultado de la evolución de las anteriores adaptadas por MySQL durante mucho tiempo como el formato por defecto para sus servidores de bases de datos. En las versiones más recientes de MySQL está cambiando es criterio y empiezan a verse versiones que incluyen InnoDB como formato por defecto.

Las tablas del tipo InnoDB (desarrolladas por la compañía finlandesa InnoBase a la que deben su nombre) tienen una estructura distinta a la de MyISAM, ya que utilizan un sólo archivo por tabla en ver de los tres habituales en los tipos anteriores. Incorporan dos de ventajas muy importantes: permiten realizar transacciones y definir reglas de integridad referencial. Hablaremos más adelante de ello.

La definición de uno u otro formato (MyISAM o InnoDB) debe hacerse en el momento de la creación de tabla y solo reguiere agregar Type=MyISAM ó Type=InnoDB a la sentencia MySQL encargada de crearla.

Creación de tablas

Las tablas son elementos de las base de datos. Por esa razón nos resultará imposible crear una tabla sin tener creada y seleccionada una base de datos. Es por eso que para la creación de una tabla se necesitan los siguientes requisitos:

Conexión con el servidor

La hemos comentado en la página anterior. Recuerda que requería la función: $conexion = mysql_connect ( servidor, usuario, contraseña ) y que esa conexión ha de ser establecida antes de cualquier otra intervención relacionada con accesos a bases de datos y tablas.

Selección de la base de datos

Dado que podemos manejar bases de datos distintas –en estos materiales usaremos ejemplos y practicas– es preciso decir a MySQL con qué base queremos trabajar.

mysql_select_db(nombre_base_datos, $conexion)

donde nombre_base_datos es el nombre de la base de datos (puede ser una cadena entrecomillada o el nombre de una variable previa que contenga ese nombre). En este último caso, como es habitual, el nombre de la variable no llevaría comillas. El segundo parámetro $conexion es el identificador de conexión. Es decir, la variable creada al establecer la conexión con MySQL. Este valor debe insertarse siempre. La razón es que MySQL permite mantener abiertas varias, de forma simultánea, varias conexiones (podríamos manejar más de un servidor de bases de datos) y en esas condiciones no pueden darse ambigüedades respecto a la base que pretendemos usar.

Creación de una tabla

En todas las transacciones PHP – MySQL habremos de utilizar instrucciones de ambos lenguajes. La forma habitual –hay algunas excepciones– en la que PHP se comunica con MySQL es por medio de la función genérica:

mysql_query("sentencia", $conexion);

donde la cadena sentencia contiene las instrucciones propias de MySQL y $conexion sigue siendo la variable que contiene el identificador de conexión.

La creación de tablas MySQL requiere una de estas dos sentencias:

CREATE TABLE IF NOT EXISTS tabla (campo1, campo2,... ) Type=tipo
o
CREATE TABLE tabla (campo1, campo2,... )) Type=tipo

donde tabla es una cadena que contiene el nombre de la tabla que pretendemos crear, dónde campo1, campo2, etc. son las definiciones de los campos que pretendemos que contenga la tabla y tipo puede ser MyISAM o InnoDB según el tipo de tabla que queramos crear.

La única diferencia entre ambas opciones es que la segunda daría un error si tratáramos de crear una tabla preexistente (deberíamos recurrir al procedimiento que hemos visto cuando creábamos bases de datos) mientras que la primera no da ese mensaje de error.

Definición de campos en una tabla MySQL

Cada uno de los campos que vayamos a crear en una tabla requiere una definición que debe contener lo siguiente:

– nombre del campo

Es una palabra cualquiera –distinta para campo de la tabla y que normalmente suele elegirse aludiendo al contenido. Por ejemplo, fecha_nacimiento, nombre_del_perro, etcétera. No va entre comillas nunca y MySQL diferencia mayúsculas/minúsculas.

Para utilizar como nombres de campo palabras reservadas del lenguaje MySQL –por ejemplo, create– debemos escribirlas entre ` `. Observa que no son comillas sino acentos graves. Lo más aconsejable es evitar esta situación.

– tipo y dimensiones

Los tipos de campos –los hemos visto en la página anterior– tienen que ajustarse a uno de los soportados por MYSQL. El tipo de campo se escribe a continuación del nombre sin otra separación que un espacio y requieren la sintaxis –estricta– correspondiente a cada tipo.

Cuando se establezca una dimensión como parámetro opcional de un campo deben tenerse en cuenta algunos detalles:


– flags del campo ( son opcionales)

Puede utilizarse cualquiera de los permitidos para cada tipo de campo. Puedes verlos encerrados, entre corchetes, al lado de cada tipo de campo. Cuando sea necesario incluirlo han de escribirse inmediatamente después del nombre del campo o de la dimesión (en los casos en que se incluya).

Ejemplo de creación de una tabla

<?php
/* nos conectamos con el servidor
recogiendo en $c el identificador de conexión */
$c=mysql_connect ("localhost","pepe","pepa") or die ("Imposible conectar");
# seleccionamos una base de datos existente
# de lo contrario nos daría un error
# pondremos como nombre ejemplos nuestra base de datos
# creada en la página anterior y usaremos $c
# importante no olvidarlo
mysql_select_db ("ejemplos", $c); 
/* ahora ya estamos en condiciones de crear la tabla
podríamos escribir ya la instrucción mysql_query y meter
detro la sentencia MySQL pero, por razones de comodidad
crearemos antes una variable que recoja toda la sentencia
y será luego cuando la ejecutemos.
Definiremos una varable llamada $crear e iremos añadiendo cosas */
# la primera parte de la instrucción es esta (espacio final incluido
$crear="CREATE TABLE IF NOT EXISTS ";
# añadiremos el nombre de la tabla que será ejemplo1
# fijate en el punto (concatenador de cadenas) que permite
# ir añadiendo a la cadena anterior
$crear .="ejemplo1 ";
#ahora pongamos el paréntesis (con un espacio delante)
#aunque el espacio también podría detrás de ejemplo1
$crear .="( ";
# insertemos el primer campo y llamemoslo num1
# hagamoslo de tipo TINYINT sin otras especificamos
# sabiendo que solo permitira valores numéricos
# comprendidos entre -128 y 127
$crear .="num1 TINYINT , ";
# LOS CAMPOS SE SEPARAN CON COMAS por eso
# la hemos incluido al final de la instrucción anterior

# ahora num2 del mismo tipo con dimensión 3 y el flag UNSIGNED
# Y ZEROFILL que: cambiará los límites de valores
# al intervalo 0 - 255, y rellenará con ceros por la izquierda
# en el caso de que el número de cifras significativas
# sea menor de 3.
# Fijate que los flags van separado unicamente por espacios
$crear .="num2 TINYINT (3) UNSIGNED ZEROFILL,  ";
# en num3 identico al anterior añadiremos un valor por defecto
# de manera que cuando se añadan registros a la tabla
# se escriba automaticamente ese valor 13 en el caso
# de que no le asignemos ninguno a ese campo
# por ser numérico 13 no va entre comillas
$crear .="num3 TINYINT (7) UNSIGNED ZEROFILL DEFAULT 13,  ";
# ahora un número decimal num4  tipo REAL con 8 digitos en total
# de los cuales tres serán decimales y también rellenaremos con ceros
# Pondremos como valor por defecto 3.14
$crear .="num4 REAL (8,3) ZEROFILL DEFAULT 3.14,  ";
# añadamos una fecha
$crear .="fecha DATE,  ";
/* una cadena con un limite de 32 carácter con BINARY
   para que diferencie  Pepe de PEPE */
$crear .="cadena VARCHAR(32) BINARY,  ";
/*  un ultimo campo –opcion– del tipo ENUM que solo admita
   como valores SI, NO, QUIZA
   fijate en las comillas y en el parentesis
 ¡¡cuidado...!! aqui no ponemos coma al final
 es el último campo que vamos a insertar y no necesita
 ser separado. Si la pones dará un ERROR */
$crear .="opcion ENUM('Si','No','Quiza')  ";
# solo nos falta añadir el paréntesis conteniendo toda la instrucción
$crear .=")Type=MyISAM";
/* tenemos completa la sentencia MYSQL
   solo falta ejecutarla mediante mysql_query
   ya que la conexión está abierta
   y la base de datos ya está seleccionada */

/* pongamos un condicional de comprobación */
if(mysql_query($crear,$c)){
	print "Se ha creado la base de datos<br>";
	print "La sentencia MySQL podríamos haberla escrito asi:<br>";
	print "mysql_query("."\"".$crear."\"  , $c);";
}else{
    print "Se ha producido un error al crear la tabla";
	 }
?>

Consideraciones sobre IF NOT EXISTS

Esta variante de CREATE –aplicable tanto en tablas como en bases de datos– tiene la ventaja de no dar mensajes de error en caso de intentar crear una tabla –o base– ya existente, pero puede darnos algún sobresalto porque no advierte que la tabla no ha sido creada y puede darnos la sensación de que puede haber reescrito una tabla anterior. Si se ejecuta reiteradamente el script no aparece ningún mensaje de error.

Código fuente creación de base de datos