Creacion de tablas

La sentencia CREATE TABLE sirve para crear la estructura de una tabla, no para rellenarla con datos. Nos permite definir las columnas que tiene y ciertas restricciones que deben cumplir esas columnas o campos. Su sintaxis es la siguiente:

CREATE TABLE nbtabla (nbcol tipo restricciones) tipo

nbtabla Nombre de la tabla que estamos definiendo
nbcol Nombre de la columna que estamos definiendo
tipo Tipo de dato de la columna, todos los datos almacenados en la columna deberán ser de ese tipo
restricciones Lista de reglas que deberá cumplir la columna
tipo Tipo de tabla, por defecto MyISAM; nosotros emplearemos InnoDB.

Consejo: Cómo ejecutar SQL en MyCC

Ejemplo 1:

Creamos una tabla llamada departamentos compuesta por:

  • Una columna llamada departamento.
  • Una columna nombre.
  • Una columna localidad.

Nota: Para ejecutar comandos SQL es necesario estar conectado a la base de datos sobre la que estamos trabajando. En MySQL eso se consigue con el comando CONNECT basededatos;.

CREATE TABLE departamentos (departamento INTEGER,
nombre CHAR,
localidad CHAR) TYPE=InnoDB;

Ahora que ya sabemos como introducir SQL en MyCC, vamos a abrir este fichero y a ejecutar el SQL que contiene en MyCC.

Restricciones

En las instrucciones ALTER TABLE (que veremos más adelante) y CREATE TABLE se pueden definir restricciones que se podrán eliminar más tarde, cuando queramos, sin tener que borrar la columna. Como restricciones tenemos la de clave primaria (clave principal), la de índice único (sin duplicados), la de valor no nulo, y la de clave foránea. Podemos poner varias restricciones, tantas como sean necesarias.

La restricción NOT NULL indica que la columna no podrá contener un valor nulo, es decir, que se deberá rellenar obligatoriamente y con un valor válido.

Sintaxis:

campo tipo NOT NULL

La restricción UNIQUE sirve para definir un índice único sobre la columna. Un índice único no permite valores duplicados, de modo que si una columna tiene definida una restricción de este tipo no podrá haber dos filas con el mismo valor en esa columna. Se suele emplear para que el sistema se asegure de que no se añaden valores que ya existen.

Sintaxis:

UNIQUE [nombre] (campo)

Esto se añade en el CREATE TABLE detrás de todas las definiciones de campos. Se le puede poner nombre a la restricción, lo que facilita la tarea de cambiar o eliminar posteriormente la restricción, haciendo referencia a la misma por su nombre. No obstante, si no le especificamos ninguno, MySQL le pondrá como nombre por defecto el nombre del campo. Si una restricción afecta a varios campos, cogerá el nombre del primero.

Claves primarias y extranjeras

La cláusula PRIMARY KEY se utiliza para definir la columna como clave principal (o primaria) de la tabla. Esto supone que la columna no puede contener valores nulos ni puede haber valores duplicados en esa columna, es decir que dos filas no pueden tener el mismo valor en esa columna. En una tabla no puede haber varias claves principales, por lo que no podemos incluir la cláusula PRIMARY KEY más de una vez.

Sintaxis:

PRIMARY KEY (campo)

La cláusula FOREIGN KEY es una columna o conjunto de columnas que contiene un valor que hace referencia a una fila de otra tabla. Genera un índice externo (toma como valor del índice campos contenidos en otras tablas). Normalmente el campo externo al que hace referencia es una clave primaria de otra tabla.

Sintaxis:

FOREIGN KEY (campo1, campo2, …)
REFERENCES tabla_externa (campo_externo1, campo_externo2,…)

Lo normal, no obstante, es que sólo haya un campo externo. Este tipo de restricciones tiene más opciones, que veremos más adelante en el apartado de integridad referencial, y sólo funcionan en tablas InnoDB.

Ejemplo 2:

Creamos una tabla llamada clientes compuesta por:

  • Una columna llamada codcliente de tipo entero definida como clave principal.
  • Una columna nombre que puede almacenar hasta 20 caracteres alfanuméricos y no puede contener valores nulos.
  • Una columna apellido de hasta 25 caracteres que no podrá contener valores repetidos.
  • Una columna edad de tipo entero sin ninguna restricción.
  • Una columna departamento de tipo entero clave foránea que hace referencia a valores de la clave principal de la tabla departamentos.

CREATE TABLE clientes (codcliente INT NOT NULL,
nombre CHAR(20) NOT NULL,
apellido CHAR(25),
edad INTEGER,
departamento INT,
PRIMARY KEY (codcliente),
UNIQUE (apellido),
INDEX (departamento),
FOREIGN KEY (departamento) REFERENCES departamentos(departamento)
) TYPE=InnoDB;

Ejemplo 3:

Creamos una tabla llamada estudiantes compuesta por:

  • Una columna llamada id que será de tipo autonumérico y ademas será la clave principal de la tabla.
  • Una columna nombre de tipo carácter.
  • Una columna apellido de tipo carácter.
  • Una columna fnacimiento de tipo fecha.
  • Una columna observaciones que sera de tipo texto.
  • Una columna cuota que será de tipo entero pequeño.

CREATE TABLE estudiantes (
id INT NOT NULL AUTO_INCREMENT,
nombre VARCHAR(20),
apellido VARCHAR(20),
fnacimiento DATETIME,
observaciones TEXT,
cuota TINYINT,
PRIMARY KEY (id)
) TYPE=InnoDB;

Ejemplo 4:

Creamos una tabla llamada formasenvio compuesta por:

  • Una columna llamada idenvio que será de tipo autonumérico y ademas será la clave principal de la tabla.
  • Una columna descripción de tipo carácter que no admitirá valores repetidos.
  • Una columna forma de tipo carácter y no podrá contener valores nulos.
  • Una columna nombreservicio de tipo texto.

CREATE TABLE formasenvio (
idenvio INT NOT NULL AUTO_INCREMENT,
descripcion VARCHAR (100),
forma VARCHAR(20) NOT NULL,
nombreservicio TEXT,
PRIMARY KEY (idenvio),
UNIQUE (descripcion)
) TYPE=InnoDB;

Borrado de tablas

La sentencia DROP TABLE sirve para eliminar una tabla. La tabla y todos sus registros serán borrados de la base de datos. Algunos gestores de bases de datos exigen que la tabla se encuentre vacía para poder realizar esta operación, pero no es lo más habitual y, de hecho, MySQL no lo hace.

No se puede eliminar una si el borrado infringe las reglas de integridad referencial que veremos más adelante (si es referenciada como clave extranjera por otra tabla y tiene registros relacionados). La sintaxis es la siguiente:

DROP TABLE [IF EXISTS] tabla;

La cláusula IF EXISTS permite evitar que MySQL de un error si la tabla existe ya. Esto es especialmente útil a la hora de hacer copias de seguridad en formato SQL.

Hay que tener cuidado con esta sentencia, ya que si se elimina una tabla no podrá ser recuperada. Hay que estar seguro de lo que vamos a hacer.

Ejemplo 5:

En el ejemplo se elimina de la base de datos la tabla clientes. Una vez comprobado que se borra, aconsejo volver a ejecutar el ejercicio en que se creaba dicha tabla pues la utilizaremos en el futuro.

DROP TABLE clientes;

Ejemplo 6:

Borrar la tabla formasenvio que hemos creado anteriormente.

DROP TABLE formasenvio;

De nuevo, recordad volver a crear la tabla una vez hallais comprobado que se borra.

Modificación de tablas

La sentencia ALTER TABLE sirve para modificar la estructura de una tabla existente. Mediante esta instrucción podemos añadir columnas nuevas o eliminarlas. Tambien nos permite añadir nuevas restricciones o borrar las existentes.

Para añadir una columna se utiliza ADD [COLUMN] y el nombre de la columna que queremos añadir seguido por el tipo de dato y las restricciones.

Ejemplo 7:

Añade a la tabla empleados una nueva columna llamada edad de tipo Byte.

ALTER TABLE empleados ADD Edad TINYINT;

Para añadir una nueva restricción en la tabla podemos utilizar la cláusula ADD restriccion.

Ejemplo 8:

Añadir a la tabla empleados un índice único (sin duplicados) sobre la columna apellidos.

ALTER TABLE empleados ADD UNIQUE (apellido);

Para borrar una columna se utiliza DROP [COLUMN] y el nombre de la columna que queremos borrar. Se perderán todos los datos almacenados en la columna.

Ejemplo 9:

Eliminar la columna edad de la tabla clientes.

ALTER TABLE clientes DROP edad;

Para modificar la definición entera de una columna se utiliza MODIFY [COLUMN].

Ejemplo 10:

Eliminar la columna edad de la tabla clientes.

ALTER TABLE empleados MODIFY Edad SMALLINT;

Eliminar restricciones

El modo de eliminar una restricción depende del tipo de restricción. Para eliminar una clave primaria, como sólo debe haber una, basta con emplear DROP PRIMARY KEY, sin más parámetros.

Ejemplo 11:

Elimina la clave primaria de la tabla clientes.

ALTER TABLE clientes DROP PRIMARY KEY;

En otros casos basta con utilizar la cláusula DROP INDEX y el nombre de la restricción que queremos borrar. Recordad que, si no hemos puesto ninguno, coincidirá con el nombre de la columna. En este caso los datos almacenados ni se modifican ni se pierden.

Ejemplo 12:

Con esta sentencia borramos el índice único sobre la columna apellidos.

ALTER TABLE empleados DROP INDEX apellido;

Aún no se pueden modificar claves extranjeras por limitaciones de InnoDB. Pero podemos borrarlas y añadirlas de nuevo:

Ejemplo 13:

Elimina la clave extranjera de la tabla clientes. Para averiguar qué nombre tiene hay que hacer antes un SHOW CREATE TABLE clientes; y emplear el nombre interno que viene tras CONSTRAINT.

ALTER TABLE clientes DROP FOREIGN KEY 0_243;

Ejemplo 14:

Añadir a la tabla estudiantes una columna llamada comentario de tipo texto.

ALTER TABLE estudiantes ADD comentario TEXT;

Ejemplo 15:

Borrar la columna observaciones de la tabla estudiantes.

ALTER TABLE estudiantes DROP observaciones;

« MySQL 4 | Creación de bases de datos

Si no se indica lo contrario, el contenido de esta página se ofrece bajo Creative Commons Attribution-ShareAlike 3.0 License