3.1. Crear tablas

Una vez realizada la conexión con el servidor MySQL y después de abrir una base de datos, podemos crear tablas en ella de la siguiente manera:

mysql> create table personas (
-> nombre char(30),
-> dirección char(40),
-> teléfono char(15)
-> );
Query OK, 0 rows affected (0.02 sec)

En este caso, la sentencia create table construye una nueva tabla en la base de datos en uso. La tabla contiene tres columnas, nombre, dirección y teléfono, todas de tipo carácter y de longitudes 30, 40 y 15 respectivamente. Si se intenta guardar en ellas valores que sobrepasen esos límites, serán truncados para poderlos almacenar. Por ese motivo, es importante reservar espacio suficiente para cada columna. Si se prevé que muchos registros ocuparán sólo una fracción del espacio reservado, se puede utilizar el tipo varchar, similar a char, con la diferencia de que el valor ocupará un espacio menor al especificado si
la cadena es más corta que el máximo indicado, ahorrando así espacio de almacenamiento.

Los nombres de las columnas admiten caracteres acentuados.  Las tablas pueden eliminarse con drop table:

mysql> drop table personas;
Query OK, 0 rows affected (0.01 sec)

Alternativamente, se puede utilizar la sintaxis siguiente:

mysql> drop table if exists personas;

 

Atributos de columna

Atributo              Significado                                                                                                                            
null Se permiten valores nulos, atributo por omisión si no se especifica
lo contrario.
not null No se permiten valores nulos.
default valor Valor por omisión que se asigna a la columna.
auto_increment El valor se asigna automáticamente incrementando en uno el máximo valor registrado hasta ahora. Se aplica sólo a las columnas marcadas como clave primaria.
primary key

Señala al campo como clave primaria, implícitamente también lo declara como not null.

 

Veámoslo con un ejemplo:

mysql> create table personas (
-> nombre varchar(40) not null,
-> dirección varchar(50) null,
-> edo_civil char(13) default ’Soltero’,
-> num_registro int primary key auto_increment,
-> ) ;
Query OK, 0 rows affected (0.01 sec)
Nota                                                       
La definición de columnas tiene el siguiente formato:
nombre_columna tipo atributos.

En este caso la tabla contiene cuatro columnas, de las cuales nombre y edo_civil permiten valores nulos, en edo_civil está implícito al no declarar lo contrario. La columna num_registro no acepta valores nulos porque está definida como clave primaria.

Aunque la creación de una clave primaria puede declararse como atributo de columna, es conveniente definirla como restricción de tabla, como se verá enseguida.

También es posible indicar restricciones sobre la tabla y no sobre columnas especificas:

mysql> create table personas (
-> nombre varchar(40) not null,
-> nacimiento date not null,
-> pareja varchar(40),
-> proveedor int not null,
->
-> primary key (nombre,nacimiento),
-> unique (pareja),
-> foreign key (proveedor) references proveedores
-> );
Query OK, 0 rows affected (0.01 sec)

Restricciones de tabla

Restricción Significado
primary key Define la o las columnas que servirán como clave primaria. Las columnas que forman parte de la clave primaria deben de ser not null.
unique Define las columnas en las que no pueden duplicarse valores. Serán las claves candidatas del modelo relacional.
foreign key (columna)
references tabla
(columna2)
Define que los valores de columna se permitirán sólo si existen en tabla(columna2). Es decir, columna hace referencia a los registros de tabla, esto asegura que no se realicen referencias a registros que no existen.

 

Se definen tres restricciones sobre la tabla después de la definición de cuatro columnas:

•    La primera restricción se refiere a la clave primaria, compuesta por las columnas nombre y nacimiento: no puede haber dos personas que se llamen igual y que hayan nacido en la misma fecha. La clave primaria permite identificar de manera unívoca cada registro de la tabla.

Claves foráneas                                   
Las restricciones de tabla foreign key no tienen efecto alguno en MySQL 4.0 y anteriores, ya que esta característica no está implementada. Se admite en la sintaxis por compatibilidad, ya que será implementada en una versión posterior. En la versión 4.1, está soportada si se utiliza
el tipo de tabla InnoDB.

•    La segunda restricción define que la pareja de una persona debe ser única: dos personas no pueden tener la misma pareja. Todo intento de insertar un nuevo  registro  donde  el  nombre  de  la  pareja  ya  exista,  será  rechazado. Cuando se restringe una columna con unique, los valores null reciben un trato especial, pues se permiten múltiples valores nulos.

•    La tercera restricción afecta a la columna proveedor, sólo puede tomar valores que existan en la clave primaria de la tabla proveedores.

Las restricciones de tabla pueden definirse con un identificador útil para hacer referencias posteriores a la restricción:

mysql> create table personas (
-> nombre varchar(40) not null,
-> nacimiento date not null,
-> pareja varchar(40),
-> proveedor int not null,
->
-> constraint clave primary key (nombre,nacimiento),
-> constraint monogamo unique (pareja),
-> constraint trabaja_en foreign key (proveedor) references
proveedores
-> );

 

key / index

La definición de índices puede hacerse también en el momento de creación de la tabla, mediante la palabra clave key (o index), a la que deberemos proporcionar el nombre que vamos a asignar a esta clave y las columnas que la forman, entre paréntesis. Existen modificadores opcionales sobre el índice que nos permiten especificar si se trata de un índice único o múltiple (según puedan existir o no varios valores iguales del índice en la tabla).

En versiones recientes de MySQL existen otros tipos de índices (espaciales, de texto completo, etc.) para tipos de datos concretos y que ofrecen prestaciones adicionales.