Crear tablas en Mysql

Ya podemos crear las tablas de la asociación Historical League de ejemplo. Para ello, utilizaremos la instrucción CREATE TABLE, que utiliza el siguiente formato:

CREATE TABLE nombre_tabla (especificaciones_columna);

nombre_tabla indica el nombre asignado a la tabla y especificaciones_columna muestra las especificaciones de las columnas de la tabla. También incluye definiciones para los índices, si los hubiera.
Para la tabla president de ejemplo, escriba la siguiente instrucción:

CREATE TABLE president
(
last_name VARCHAR(15) NOT NULL,
first_name VARCHAR(15) NOT NULL,
suffix VARCHAR(5) NOT NULL,
city VARCHAR(20) NOT NULL,
state VARCHAR(2) NOT NULL,
birth DATE NOT NULL,
death DATE
);

Puede ejecutarla de varias formas: manualmente si la introduce o utilizar un archivo (create_president.sql).
Si desea introducirla manualmente, invoque mysql y convierta a sampdb en la base de datos de ejemplo predeterminda:

% mysql sampdb

Tras ello, introduzca la instrucción CREATE TABLE anterior, incluido el punto y coma final. No importa el sangrado ni que los saltos de línea sean idénticos.
Para crear la tabla president a través de un archivo con instrucciones sql ingrese lo siguiente:

% mysql sampdb < create_president.sql

Independientemente de cómo invoque mysql, debe especificar los parámetros de conexión que necesite (nombre de host, nombre de usuario o contraseña) en la línea de comandos.
A continuación analizaremos la instrucción CREATE TABLE. La especificación de las columnas incluye el nombre, el tipo de datos(el tipo de valores que albergará la columna) y atributos opcionales.
Los dos tipos de datos utilizados en la tabla president son VARCHAR y DATE. VARCHAR(n), lo que significa que la columna contiene valores de carácter de longitud variable, con una longitud máxima de n caracteres. Es decir, contienen cadenas que pueden variar de tamaño pero con un límite. Puede elegir el valor de n en función de la longitud que vayan a tener los valores. state se define como VARCHAR(2), suficiente para acomodar las abreviaturas de dos caracteres de los estadios; el resto de columnas son de mayor tamaño.
El otro tipo de datos es DATE. Indica que la columna contiene valores de fecha. Sin embargo, le sorprenderá el formato de representación de las fechas. MySQL espera fechas en formato ‘CCYY-MM-DD’, donde CC, YY, MM y DD representan el siglo, año, mes y día del mes. Es el estándar SQL para la representación de fechas (también denominado formato ISO 8601). Por ejemplo, para especificar la fecha 18 de julio de 2005 en MySQL, debe utilizar ‘2005-07-18′, no ’07-18-2005′ ni ’18-07-2005’.
Los únicos atributos utilizados para la columna son NULL (pueden faltar valores) y NOT NULL (los valores son obligatorios). La mayoría de las columnas son NOT NULL ya que siempre necesitaremos un valor. Las dos columnas con valores NULL son suffix (la mayoría de nombres no lo tienen) y death (para los presidentes todavía vivos).
Para la tabla member, la instrucción CREATE TABLE es la siguiente:

CREATE TABLE member
(
member_id INT UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (member_id),
last_name VARCHAR(20) NOT NULL,
first_name VARCHAR(20) NOT NULL,
suffix VARCHAR(5) NULL,
expiration DATE NULL,
email VARCHAR(100) NULL,
street VARCHAR(50) NULL,
city VARCHAR(50) NULL,
state VARCHAR(2) NULL,
zip VARCHAR(10) NULL,
phone VARCHAR(10) NULL,
interests VARCHAR(255) NULL
);

Como en el caso anterior, puede introducir de forma manual la instrucción directamente en mysql o utilizar un archivo, en este caso, create_member.sql. Para utilizarlo, ejecute el siguiente comando:

% mysql sampdb < create_member.sql

En términos de tipos de datos, la mayoría de columnas de la tabla member menos dos no son demasiado interesantes, ya que se crean como cadenas de longitud variable. Las excepciones de member_id y expiration, que almacenan número de secuencia y fechas, respectivamente.
El principal aspecto de la columna member_id es que sus valores deben ser exclusivos con objeto de evitar que haya confusiones. En este caso, utilizamos una columna de tipo AUTO_INCREMENT para que MySQL genere números exclusivos automáticamente al añadir nuevos miembros. Aunque solamente contenga números, la definición de member_id tiene varias partes:

  • INT significa que la columna contiene enteros (valores numéricos sin fracciones).
  • UNSIGNED no permite valores negativos.
  • NOT NULL requiere que haya valores en la columna. Esto evita que se creen miembros sin números de ID.
  • AUTO_INCREMENT es un atributo especial en MySQL. Indica que la columna contiene números secuenciales. El mecanismo es el siguiente: si no proporciona valores para la columna member_id al crear una nueva fila de la tabla member, MySQL genera automáticamente el siguiente número secuencial y lo asigna a la columna. Este coportamiento también se produce si asigna explícitamente el valor NULL a la columna.
    AUTO_INCREMENT facilita la asignación de un ID exclusivo a cada miembro, ya que MySQL se encarga de generar el valor.

La cláusula PRIMARY KEY indica que la columna member_id está indexada para agilizar las búsquedas. También indica que los valores de la columna deber ser exclusivos. Esta última propiedad es muy útil para los valores de ID, ya que impide que usemos el mismo valor dos veces. Además, MySQL requiere que todas las columnas AUTO_INCREMENT tengan un índice, y la definición de la tabla sería ilegal sin uno. (Las columnas PRIMARY KEY también deber ser NOT NULL y si se omite, MySQL lo añade automáticamente.
Si no comprende los conceptos de AUTO_INCREMENT y PRIMARY KEY, piense que son una forma magica de generar números de ID indexados. No importa de qué valores se trate, siempre que sean exlusivos para cada miembro.
La columna expiration es de tipo DATE. Permite valores NULL, por lo que su valor predeterminado también es NULL, lo que significa que no se ha introducido ninguna fecha. Como mencionamos antes, expiration puede ser NULL para indicar miembros con una suscripción vitalicia.
Después de indicar a MySQL que cree varias tablas, compruébelo. En mysql, ejecute la siguiente instrucción para ver la estructura de la tabla president:

mysql> DESCRIBE president;

Field Type NUll Key Default Extra
last_name varchar(15) NO      
first_name varchar(15) NO      
suffix varchar(5) YES   NULL  
city varchar(20) NO      
state varchar(2) NO      
birth date NO      
death date YES   NULL  

Si ejecuta una instrucción DESCRIBE member, mysql mostrará información similar para la tabla member.
DESCRIBE es muy útil si se olvida el nombre de una columna o quiere saber el tipo de datos o su longitud. También permite conocer el orden en que se almacenan las columnas en las filas, dato importante para ejecutar instrucciones INSERT o LOAD DATA que esperan valores de columna en un orden predeterminado.
La información generada por DESCRIBE se puede obtener de distintas formas. Se puede abreviar como DESC, o escribir en una instrucción EXPLAIN o SHOW. Las siguientes instrucciones significan los mismo:

DESCRIBE president;
DESC president;
EXPLAIN president;
SHOW COLUMNS FROM president;
SHOW FIELDS FROM president;

Estas instrucciones también le permiten restringir el resultado a determinadas columnas. Por ejemplo, puede añadir una cláusula LIKE al final de la instrucción SHOW para mostrar información de los nombres de columna que coincidan con un determinado patrón:

mysql> SHOW COLUMNS FROM president LIKE '%name';

Field Type NUll Key Default Extra
last_name varchar(15) NO      
first_name varchar(15) NO      

DESCRIBE president ‘%name’ es lo mismo. El carácter % se utiliza como comodín. SHOW FULL COLUMNS es similar a SHOW COLUMNS pero muestra información adicional. Pruébelo.
La instrucción SHOW tiene otras formas útiles para obtener distintos tipos de información sobre MySQL. SHOW TABLES enumera las tablas de la base de datos predeterminada, de modo que con las dos tablas creadas en la base de datos sampdb, el resultado sería el siguiente:

msyql> SHOW TABLES;

Tables_in_sampdb
member
president

SHOW DATABASES enumera las bases de datos gestinadas por el servidor conectado:

mysql>SHOW DATABASES;

Tables_in_sampdb
information_schema
menagerie
mysql
sampdb
test

La lista de bases de datos varía entre servidores, pero al menos debería ver information_schema y sampdb. information_schema es una base de datos especial que siempre existe, y sampdb es la que hemos creado. Es probable que también vea test, que se crea durante la instalación de MySQL. En función de sus derechos de acceso, puede ver la base de datos mysql, que contiene las tablas de permisos que controlan sus acciones.
El programa cliente mysqlshow proporciona una interfaz de línea de comandos a los mismos tipos de información que muestra la instrucción SHOW. Recuerde que al ejecutar mysqlshow, puede que tenga que proporcionar las correspondientes opciones de línea de comandos para el nombre de usuario, contraseña y nombre de host. Son las mismas opciones que al ejecutar mysql. Sin argumentos, mysqlshow muestra una lista de bases de datos:

% mysqlshow

Tables_in_sampdb
information_schema
menagerie
mysql
sampdb
test

Si se utiliza como parámetro el nombre de una base de datos, el comando muestra las tablas de la misma:

% mysqlshow sampdb
Database: sampdb

Tables
member
president

Comparte