Actualizado el 14-01-2007
versión para imprimir
Creación de bases de datos y tablas
Para la creación de nuevas bases de datos basta sencillamente usar la orden CREATE DATABASE nombre_db que se limita a habilitar un nuevo directorio para los datos de la nueva base. Se puede completar la orden con la clausula CREATE DATABASE IF NOT EXISTS db_nombre en cuyo caso la nueva base de datos solo se intentará crear si no existe otra con el mismo nombre. Si no usamos IF NOT EXISTS y el nuevo nombre está duplicado, MySQL nos avisará del error y no ejecutará acción ninguna.
La creación de tablas tiene muchas mas opciones, ya que aqui no nos limitamos a reservar un espacio, sino que debemos crear la propia estructura de la tabla
La sintaxis general es:
CREATE TABLE nombre_tbl (nombre_columna1 TIPO_COLUMNA(nn), nombre columna2 TIPO_COLUMNA(nn), nombre_columna3 TIPO_COLUMNA(nn), ... );
Es decir, para cada columna debemos especificar su nombre, su tipo (char, varchar, int, etc) y su longitud.
Un buen diseño de la tabla determinará el éxito o fracaso de nuestra base de datos. Existen abundantes estudios acerca de la normalización de las bases de datos, cuya complejidad excede de las posibilidades de esta página. A un nivel mucho mas básico se puede indicar que la sola elección del tipo de tabla adecuado, y del tipo (y longitud) de datos de cada columna tendrá su reflejo en la rapidez y eficacia del sistema.
La tabla se creará en la base de datos que esté en uso en ese momento. También puedes crear específicamente la tabla en otra base de datos del mismo servidor, usando la sintaxis CREATE TABLE bd_nombre.tabla_nombre
Algunas reglas a recordar son las siguientes:
- longitud: es opcional SALVO para los campos tipo DECIMAL NUMERIC CHAR y VARCHAR.
Por ejemplo, CREATE TABLE mi_tabla (id_field INT(4));
Como sabemos, las columnas tipo INT pueden albergar desde -2147463846 a 2147483647 (unsigned). Al fijar el rango en 4, lo limitamos desde -999 a 9999.
NOTA: MySQL guardará correctamente el dato fuera del rango especificado, siempre que no esté, además, fuera del rango para ese tipo de columna.
Para datatypes no numéricos, el rango determina el número fijo de carácteres almacenados en cada caso (CHAR) o el número máximo permitido (p.e. VARCHAR). - decimal: máximo número de decimales para aquellos datatypes que admiten decimales. Si el número a almacenar tiene mas, será redondeado:
FLOAT (5,2)=> 2.14 se almacena como 2.14 => 32.147 se almacena como 32.15 (5 caracteres en total) => 232.14 se almacena como 232.1
Es decir, un número máximo de 5 caracteres, un número máximo (si caben en el total) de 2 decimales. - El atributo BINARY puede usarse con CHAR y VARCHAR, con el único efecto de que en caso de búsqueda distinguirá mayúsculas y minúsculas.
- El atributo ZEROFILL solo puede emplearse con datos tipo numérico. El atributo UNSIGNED solo puede emplearse con datos del tipo numérico entero.
- Cada columna (independientemente de su tipo) puede ser NULL o NOT NULL. Si no especificas nada, se asume que la columna es NULL
- Las columnas (salvo que sean AUTO_INCREMENT) siempre tienen un valor por defecto. Si la columna es tipo NULL el valor por defecto es justamente ese, NULL. Si es NOT NULL, y la columna numérica, el valor por defecto es 0. Si la columna no es tipo numérica el valor por defecto será "" (cadena vacia). Puede establecerse un valor por defecto propio con DEFAULT.
- Solo puede existir una columna AUTO_INCREMENT por tabla, que debe ser del tipo entero, y además NOT_NULL
- La columna AUTO_INCREMENT siempre será considerada como índice primario (PRIMARY KEY).
- Indices: en Mysql los indices se llaman (indistintamente) KEY o INDEX. En principio se puede indexar cualquier columna, sea cual sea su tipo, aunque algunas son mas idóneas que otras.
- Un INDEX puede ser UNIQUE en cuyo caso esa columna no podrá tener datos repetidos.
- PRIMARY KEY es un index sobre una columna NOT NULL y UNIQUE (que no puede estar vacía ni tener valores repetidos); es decir que la columna no puede valores vacios o duplicados.
- Aunque solo puede haber un PRIMARY KEY por tabla, puedes tener tantos indices como quieras (o debas) y puedes crearlos NOT NULL y UNIQUE
- Solo puede haber una columna AUTO_INCREMENT, solo puede existir un indice PRIMARY KEY (aunque puedes formar un PRIMARY KEY sobre dos o mas columnas.
- Es posible indicar la longitud del indice. En ese caso solo se indexaran los primeros caracteres de cada campo hasta la longitud indicada. La indicación de longitud es opcional para los campos CHAR y VARCHAR, y obligatorio para los campos de las familias TEXT y BLOB.
- Las columnas tipo CHAR VARCHAR y TEXT pueden ser indexadas además como FULLTEXT.