Sintaxis

CREATE TABLE tbl_name
(
nombre_columna1 TIPO <NOT NULL | NULL> <DEFAULT default_value> <AUTO_INCREMENT>,
nombre_columna2 TIPO <NOT NULL | NULL> <DEFAULT default_value> ,
nombre_columna3 TIPO <NOT NULL | NULL> <DEFAULT default_value> ,
nombre_columnaN TIPO <NOT NULL | NULL> <DEFAULT default_value> ,
{INDEX|KEY} <index_name1> (index_col_name,...) ,
{INDEX|KEY} <index_nameN> (index_col_name,...) ,
CONSTRAINT1 ,
CONSTRAINTN
) <ENGINE= {InnoDB | MyISAM}> <{CHARACTER SET | CHARSET } <=> charset_name>
+Info: charset_name.

TIPOS DE DATOS

| TINYINT<(LENGTH)> <UNSIGNED> ---> Booleano
| INT<(LENGTH)> <UNSIGNED> --> Entero
| DOUBLE<(LENGTH,decimals)> <UNSIGNED> <ZEROFILL> ---> Decimal (Muchos decimales Maxima precision
| FLOAT<(LENGTH,decimals)> <UNSIGNED> <ZEROFILL> ---> Decimal (No muchos decimales)
| DATE ---> Fecha
| TIME ---> Hora
| TIMESTAMP ----> Fecha y Hora
| DATETIME ---> Fecha y Hora (Lo mismo que TIMESTAMP)
| CHAR<(LENGTH)> ---> Cadena de caracteres (de longitud fija)
| VARCHAR(LENGTH) ---> Cadena de caracteres (de longitud variable) (Length es el maximo)
| TINYBLOB ---> Archivo pequeño
| BLOB ---> Archivo
| MEDIUMBLOB ---> Archivo medio
| LONGBLOB ---> Archivo grande
| TINYTEXT <BINARY> ---> Texto pequeño
| TEXT <BINARY> ---> Texto
| MEDIUMTEXT <BINARY> ---> Texto medio
| LONGTEXT <BINARY> ----> Texto largo
| ENUM(value1,value2,value3,...) ---> Lista numerada
+Info sobre tipos de datos: http://dev.mysql.com/doc/refman/5.5/en/storage-requirements.html

Tabla resumen de capacidad de almacenamiento de BLOB y TEXT

TIPO DE DATO
Bytes
Kilobytes
Megabytes
Gigabytes
TINYBLOB, TINYTEXT
256
0.25


BLOB, TEXT
65536
64


MEDIUMBLOB MEDIUMTEXT
16777216
16384
16

LONGBLOB, LONGTEXT
4294967296
4194304
4096
4

Nota sobre auto_increment

  • Se utiliza básicamente para el PRIMARY KEY
  • El control de qué valor se da a cada registro es exclusivo de la BBDD, aunque el usuario podría especificar un valor concreto.
  • En una tabla sólo puede haber un auto_increment.
  • El tipo de dato del campo tiene que ser INT

CONSTRAINTs

<CONSTRAINT <symbol>> PRIMARY KEY (col_name,...)
PRIMARY KEY (idcliente)
CONSTRAINT restriccion_pk_cliente PRIMARY KEY (idcliente)
CONSTRAINT PRIMARY KEY (idcliente)
<CONSTRAINT <symbol>> UNIQUE (col_name,...)
UNIQUE (email)
CONSTRAINT restriccion_UQ_mail UNIQUE (email)
CONSTRAINT UNIQUE (email)
<CONSTRAINT <symbol>> FOREIGN KEY (col_name,...) REFERENCES tbl_name (col_name,...)
<ON DELETE reference_option>
<ON UPDATE reference_option>
FOREIGN KEY (cliente_id) REFERENCES clientes (idcliente)
CONSTRAINT alquiler_fk_cl FOREIGN KEY (cliente_id) REFERENCES clientes (idcliente)
CONSTRAINT FOREIGN KEY (cliente_id) REFERENCES clientes (idcliente)

reference_option

--lo que le pasa a las filas hijas cuando una fila padre es DELETE o UPDATE
RESTRICT | CASCADE | SET NULL | NO ACTION
Nota de clase: Es muy raro usar ON UPDATE, por lo que no lo usaremos.
Respecto al ON DELETE, decidiremos cúando queremos que sea CASCADE.

Ejemplos de constraint:

CONSTRAINT sala_PK PRIMARY KEY (sal_id)
CONSTRAINT PRIMARY KEY (sal_id)
PRIMARY KEY (sal_id)
CONSTRAINT sala_pwd UNIQUE (sal_pass)
CONSTRAINT UNIQUE (sal_pass)
UNIQUE (sal_pass)
CONSTRAINT sala_city FOREIGN KEY (sal_ciudad) REFERENCES ...
CONSTRAINT FOREIGN KEY (sal_ciudad) REFERENCES ...
FOREIGN KEY (sal_ciudad) REFERENCES ...

Ejemplos

Ejemplos completos con Diseño