Está en la página 1de 9

CREATE DATABASE: Crear una base de datos en MySQL

Vamos a ver en este post la sentencia CREATE DATABASE para crear una base de
datos en MySQL.

Otras sentencias para eliminar y modificar una BBDD son:

 DROP DATABASE: Eliminar una base de datos en MySQL


 ALTER DATABASE: Modificar una base de datos
Si vamos a crear una nueva base de datos con sus tablas y registros esta sería la
primera sentencia a ejecutar. Los tipos de dato que podemos guardar en una base de
datos son los siguientes:

 Tipos de dato con formato fecha en MySQL


Listado de cada uno de los tipos de dato con formato fecha en MySQL, su ocupación
en disco y valores.

 DATE: Válido para almacenar una fecha con año, mes y día, su rango oscila
entre ‘1000-01-01’ y ‘9999-12-31’.
 DATETIME: Almacena una fecha (año-mes-día) y una hora (horas-minutos-
segundos), su rango oscila entre ‘1000-01-01 00:00:00’ y ‘9999-12-31 23:59:59’.
 TIME: Válido para almacenar una hora (horas-minutos-segundos). Su rango de
horas oscila entre -838-59-59 y 838-59-59. El formato almacenado es
‘HH:MM:SS’.
 TIMESTAMP: Almacena una fecha y hora UTC. El rango de valores oscila
entre ‘1970-01-01 00:00:01’ y ‘2038-01-19 03:14:07’.
 YEAR: Almacena un año dado con 2 o 4 dígitos de longitud, por defecto son 4.
El rango de valores oscila entre 1901 y 2155 con 4 dígitos. Mientras que con 2
dígitos el rango es desde 1970 a 2069 (70-69).

 Tipos de dato numéricos en MySQL


Listado de cada uno de los tipos de dato numéricos en MySQL, su ocupación en disco
y valores.

 INT (INTEGER): Ocupación de 4 bytes con valores entre -2147483648 y


2147483647 o entre 0 y 4294967295.
 SMALLINT: Ocupación de 2 bytes con valores entre -32768 y 32767 o entre 0 y
65535.
 TINYINT: Ocupación de 1 bytes con valores entre -128 y 127 o entre 0 y 255.
 MEDIUMINT: Ocupación de 3 bytes con valores entre -8388608 y 8388607 o
entre 0 y 16777215.
 BIGINT: Ocupación de 8 bytes con valores entre -8388608 y 8388607 o entre 0
y 16777215.
 DECIMAL (NUMERIC): Almacena los números de coma flotante como
cadenas o string.
 FLOAT (m,d): Almacena números de coma flotante, donde ‘m’ es el número de
dígitos de la parte entera y ‘d’ el número de decimales.
 DOUBLE (REAL): Almacena número de coma flotante con precisión doble.
Igual que FLOAT, la diferencia es el rango de valores posibles.
 BIT (BOOL, BOOLEAN): Número entero con valor 0 o 1.

 Tipos de dato con formato string en MySQL


Listado de cada uno de los tipos de dato con formato string en MySQL, su ocupación
en disco y valores.

 CHAR: Ocupación fija cuya longitud comprende de 1 a 255 caracteres.


 VARCHAR: Ocupación variable cuya longitud comprende de 1 a 255 caracteres.
 TINYBLOB: Una longitud máxima de 255 caracteres. Válido para objetos
binarios como son un fichero de texto, imágenes, ficheros de audio o vídeo. No
distingue entre minúculas y mayúsculas.
 BLOB: Una longitud máxima de 65.535 caracteres. Válido para objetos binarios
como son un fichero de texto, imágenes, ficheros de audio o vídeo. No distingue
entre minúculas y mayúsculas.
 MEDIUMBLOB: Una longitud máxima de 16.777.215 caracteres. Válido para
objetos binarios como son un fichero de texto, imágenes, ficheros de audio o
vídeo. No distingue entre minúculas y mayúsculas.
 LONGBLOB: Una longitud máxima de 4.294.967.298 caracteres. Válido para
objetos binarios como son un fichero de texto, imágenes, ficheros de audio o
vídeo. No distingue entre minúculas y mayúsculas.
 SET: Almacena 0, uno o varios valores una lista con un máximo de 64 posibles
valores.
 ENUM: Igual que SET pero solo puede almacenar un valor.
 TINYTEXT: Una longitud máxima de 255 caracteres. Sirve para almecenar texto
plano sin formato. Distingue entre minúculas y mayúsculas.
 TEXT:Una longitud máxima de 65.535 caracteres. Sirve para almecenar texto
plano sin formato. Distingue entre minúculas y mayúsculas.
 MEDIUMTEXT:Una longitud máxima de 16.777.215 caracteres. Sirve para
almecenar texto plano sin formato. Distingue entre minúculas y mayúsculas.
 LONGTEXT: Una longitud máxima de 4.294.967.298 caracteres. Sirve para
almecenar texto plano sin formato. Distingue entre minúculas y mayúsculas.

Otra sentencia interesante es la CREATE TABLE que sirve para crear las tablas. En
este otro post eplico cómo conectar a una BBDD con PHP:
 Realizar una conexión a una base de datos MySQL con PHP

Sintaxis de CREATE DATABASE


Veamos la sintaxis necesaría para crear una base de datos en MySQL extraída de su
web oficial:

1 CREATE DATABASE nombre_BBDD;


De esta sencilla manera podríamos tener creada la BBDD, solo tenemos que especificar
el nombre de la misma.

Ejemplos para crear una base de datos en MySQL


Vamos a ver con estos ejemplos cómo serían las diferentes sintaxis que podemos usar:

1 CREATE DATABASE mi_nueva_base_de_datos;


Con la sintaxis superior no tendríamos ningún problema en crearla siempre y cuando no
exista anteriormente. Para asegurarnos que la BBDD se crea y que o existe una con el
mismo nombre tenemos que usar la sentencia ‘IF NOT EXIST‘:

1 CREATE DATABASE IF NOT EXISTS mi_nueva_base_de_datos;


Esta sería una manera más elegante de crear una base de datos. Aún así podemos
crearla definiendo la codificación con ‘CHARACTER SET‘ (Conjunto de caracteres) y
‘COLLATE‘ (colación):

1 CREATE DATABASE IF NOT EXISTS mi_nueva_base_de_datos CHARACTER SET utf8 COLLATE utf8_general_ci;
En este ejemplo he puesto codificación UTF8.

CREATE TABLE MySQL: Crear una tabla en una base de datos


Extenso post para repasar la sentencia CREATE TABLE de MySQL, su funcionalidad es la de
crear una tabla con todas sus características en una base de datos MySQL.

Tras crear una base de datos los tipos de dato que podemos guardar son:

 Numéricos
 De fecha
 Tipo string

Otras sentencias para trabajar con tablas son:

 TRUNCATE TABLE
 DROP TABLE
 MySQL SELECT
 ALTER TABLE
 MySQL INSERT
 RENAME TABLE

Veamos a las diferentes sintaxis que tenemos tener en la creación de una tabla extraídas de su web
oficial.
Sintaxis básica de la sentencia CREATE TABLE de
MySQL
Vamos a ir viendo las sintaxis de los diferentes tipos de columnas que puede pueden tener las tablas
en MySQL:

1 CREATE TABLE nombre_tabla

Con el código superior tenemos la sentencia estandar para crear la tabla, solamente tenemos que
poner el nombre de la tabla, nombre de la columna y su tipo.

Podemos tener una base de datos con numerosas tablas, por lo que al crear una nueva podemos tener
una existente con el mismo nombre. Para evitar problemas debemos usar la sentencia ‘IF NOT
EXIST‘:

1 CREATE TABLE IF NOT EXISTS nombre_tabla

Quedando una estructura similar a esta:

1 CREATE TABLE IF NOT EXISTS nombre_tabla

2 (definición de la tabla,

3 definición de columnas,

4 tipos de columnas

5 );

Definición de la tabla
Vamos con la sintaxis para definir las diferentes definiciones que se pueden hacer sobre la tabla:

1 | [CONSTRAINT [nombre]] PRIMARY KEY [index_tipo] (index_col_nombre,...)

2 [index_option] ...

3 | {INDEX|KEY} [index_name] [index_tipo] (index_col_nombre,...)

4 [index_option] ...

5 | [CONSTRAINT [nombre]] UNIQUE [INDEX|KEY]

6 [index_name] [index_tipo] (index_col_nombre,...)

7 [index_option] ...

8 | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_nombre,...)

9 [index_opción] ...

10 | [CONSTRAINT [nombre]] FOREIGN KEY

11 [index_nombre] (index_col_nombre,...) reference_definition

12 | CHECK (expr)
CONSTRAINT es una restricción, el nombre de la restricción debe ser única en la base de datos.
Estas exigen la integridad de los datos de las clumnas de la tabla.

Explico cada opción del código superior:

 PRIMARY KEY: Solo se puede crear una primary key por tabla, es la clave primaria que identifica
de manera única cada registro/fila de la tabla. Por ejemplo el documento de identidad DNI de una
persona.
 INDEX|KEY: Ambas son sinónimas, puede haber una o varias. Establecen los íncides de la tabla
con los cuales se pueden agilizar las búsquedas en la base de datos. De esta manera se evita la
búsqueda de un parámetro por cada columna de la tabla. Es como un índice de un libro con el que
nos evitamos recorrer cada página.
 UNIQUE: Es una restricción por la cual el valor de dicha columna debe ser único y diferente al del
valor de dicha columna de resto de registros. Por ejemplo se suele usar con las columnas declaradas
como primary key.
 FULLTEXT: Es un íncide que solo funciona con las columnas con formato char, varchar, text y con
alamcenamiento MyISAM. Este índice facilita las grandes búsquedas sobre texto y realiza
automáticamente comparaciones de texto sobre una cadena dada. Realiza búsquedas más afinadas
que la sentencia LIKE. Se ignoran las palabras con menos de 4 letras y las palabras que aparezcan en
más del 50% de los registros.
 FOREIGN KEY: Clave foránea, es un índice por el cual podemos relacionar 2 tablas. Este valor
debe existir en ambas tablas, por ejemplo el código postal de la tabla ‘usuarios’ y la tabla
‘población’.

Si necesitáis más info sobre los índices UNIQUE, FULLTEXT, INDEX, PRIMARY KEY podéis
consultar este post:

 MySQL CREATE INDEX: Crear o añadir índices en tablas

En este otro post explico cómo eliminar índices:

 MySQL DROP INDEX: Eliminar índices de las tablas

Definición de columnas
Vamos con la sintaxis de las definiciones de columna de la sentencia de CREATE TABLE MySQL

1 tipo_dato [NOT NULL | NULL] [DEFAULT valor_defecto]

2 [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]

3 [COMMENT 'string']

4 [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}]

5 [STORAGE {DISK|MEMORY|DEFAULT}]

6 [reference_definition]

Os explico las opciones:

 NOT NULL | NULL: Establecemos si el valor de la columna debe rellenarse obligatoriamente o no.
 AUTO_INCREMENT: Establece un valor incial para un incremento posterior con la inserción de
cada nuevo registro.
 COMMENT: Comentario a modo informativo de la columna.
 COLUMN_FORMAT: Establece la ocupación de la columna, FIXED para un valor fijo,
DYNAMIC para un valor variable y DEFAULT para una coupación por defecto.
 STORAGE: Posibilidad de almacenamiento en memoria o disco.

Tipos de dato de cada columna de la tabla


Los diferentes tipos de dato de una tabla MySQL son los que ya repasamos en varios post anteriores
y que menciono arriba:

 Numéricos
 De fecha
 Tipo string

La sintaxis sería la siguiente:

1 BIT[(length)]

2 | TINYINT[(length)] [UNSIGNED] [ZEROFILL]

3 | SMALLINT[(length)] [UNSIGNED] [ZEROFILL]

4 | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL]

5 | INT[(length)] [UNSIGNED] [ZEROFILL]

6 | INTEGER[(length)] [UNSIGNED] [ZEROFILL]

7 | BIGINT[(length)] [UNSIGNED] [ZEROFILL]

8 | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL]

9 | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL]

10 | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL]

11 | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL]

12 | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL]

13 | DATE

14 | TIME

15 | TIMESTAMP

16 | DATETIME

17 | YEAR

18 | CHAR[(length)] [BINARY]

19 [CHARACTER SET charset_name] [COLLATE collation_name]

20 | VARCHAR(length) [BINARY]

21 [CHARACTER SET charset_name] [COLLATE collation_name]

22 | BINARY[(length)]

23 | VARBINARY(length)

24 | TINYBLOB

25 | BLOB
26 | MEDIUMBLOB

27 | LONGBLOB

28 | TINYTEXT [BINARY]

29 [CHARACTER SET charset_name] [COLLATE collation_name]

30 | TEXT [BINARY]

31 [CHARACTER SET charset_name] [COLLATE collation_name]

32 | MEDIUMTEXT [BINARY]

33 [CHARACTER SET charset_name] [COLLATE collation_name]

34 | LONGTEXT [BINARY]

35 [CHARACTER SET charset_name] [COLLATE collation_name]

36 | ENUM(value1,value2,value3,...)

37 [CHARACTER SET charset_name] [COLLATE collation_name]

38 | SET(value1,value2,value3,...)

39 [CHARACTER SET charset_name] [COLLATE collation_name]

40 | spatial_type

Ejemplo para crear una tabla en MySQL con


CREATE TABLE
Aquí os pongo un ejemplo de una sentencia SQL para crear la tabla en una base de datos MySQL:

1 CREATE TABLE IF NOT EXISTS `clientes` (

2 `nif` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Clave primaria',

3 `nombre` varchar(50) NOT NULL COMMENT 'nombre cliente',

4 `apellidos` varchar(100) NOT NULL COMMENT 'Apellidos cliente',

5 `telefono` int(9) NOT NULL COMMENT 'móvil',

6 `codigo_postal` int(5) DEFAULT NULL,

7 `edad` int(3) DEFAULT NULL,

8 `sexo` char(1) NOT NULL,

9 `profesion` text NOT NULL,

10 PRIMARY KEY (`nif`),

11 UNIQUE KEY `telefono` (`telefono`),

12 KEY `nombre` (`nombre`),

13 FULLTEXT KEY `apellidos` (`apellidos`)

14 ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='tabla de clientes';


Relacionar 3 tablas
Necesito ayuda he echo una tabla con los datos personales de alumnos, esta debe
suministrar los datos básicos a otras dos, trabajo realizado, y la otra cuota mensuales, como
puedo relacionarlas, como puedo hacer la arquitectura para que soloamente halla una única
tabla de datos personales y notenga que poner dos veces los datos personales en cada tabla.
Seguir

1 RESPUESTA
Tienes una tabla principal, que es la de Alumnos. En esa debes tener un campo, que sea
clave principal (es decir, valor único e irrepetible para cada alumno). Imaginemos que es un
número de matricula.
En las tablas relacionadas, basta con que incluyas un campo (del mismo tipo que la clave
principal, en nuestro caso, numérico), en el que se almacenará, el código del alumno.
Una vez hecho esto, abres Relaciones, y estableces la relación (picando y arrastrando) de un
campo a otro. Aparecerá una linea... y ya está.
el 23 nov. 10

Hola gracias por atenderme, utilizo office 2003, eso ya lo he intentado y funciona, pero a la
hora de poner la tercera tabla de cuotas no se como relacionarla con la tabla de datos
personales y aunque lo haga no aparece id autonumérico de la tabla de datos personales en
la tabla de cuotas
El asunto es que la de datos personales le tiene que dar id de nº de alumno a las dos tablas,
la de trabajos realizados y cuotas socurrrooo necesito ayuda
Muchas gracias
el 23 nov. 10

¿Tienes en cada una de las tablas un campo numérico que sea el código del alumno? Si
cuando escribes datos (por ejemplo a través de un formulario) utilizas un cuadro combinado
que tome los nombres de los alumnos, el solo, automáticamente, toma por defecto el valor
de IdAlumno y lo almacena en ese campo. Lo siento, pero no entiendo cual es el problema.
el 23 nov. 10

El problema que tengo es que en no aparece el código numérico de la tabla de datos


personales, en las otras dos, para identificar al alumno en las otras dos tablas, por ello
cuando hago un formulario no me filtra estas dos tablas, por que no están bien relacionada
¿Tu crees que si relaciono por sus id dealumno a las 3 tablas me filtraran los formularios
correctamente aunque en las tablas (de objetos de access) me apracezcan dos y no tres con
con desplegable en +?
Gracias
el 24 nov. 10

Buf. Lo siento pero no te entiendo. Repasemos:


Tabla Alumnos / Campos: IdAlumno, Nombre, Apellidos
Tabla Cuotas / Campos: IdCuota, Valor, CodAlumno
Tabla Trabajo / Campos: IdTrabajo, Descripción, CodAlumno
Los campos CodAlumno son numéricos y el IdAlumno, autonumérico. Tienes que
relacionarlos en la ventana Relaciones, IdAlumno con cada uno de los otros (dos rayas).
Cuando crees un formulario de Cuotas, o de Trabajo, al poner el campo CodAlumno,
puedes poner un cuadro combinado, que tome los valores de la tabla Alumnos, y almacen el
valor en el campo CodAlumno. Si pones que oculte la clave principal, como te recomienda,
lo que se verá es el nombre del alumno, aunque lo que de verdad está almacenando es el
numero. PRueba esto, aunque sea con una base de datos nueva, mete unos cuantos datos y
luego echale un vistazo a las tablas.
Y si me explicas, por favor, intenta hacerlo sobre este ejemplo, así me aclaro mejor.

También podría gustarte