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:
Otras sentencias para trabajar con tablas son:
Veamos a las diferentes sintaxis que tenemos tener en la creación de una tabla extraídas de su web oficial.
Vamos a ir viendo las sintaxis de los diferentes tipos de columnas que puede pueden tener las tablas en MySQL:
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‘:
CREATE TABLE IF NOT EXISTS nombre_tabla
Quedando una estructura similar a esta:
CREATE TABLE IF NOT EXISTS nombre_tabla (definición de la tabla, definición de columnas, tipos de columnas );
Vamos con la sintaxis para definir las diferentes definiciones que se pueden hacer sobre la tabla:
| [CONSTRAINT [nombre]] PRIMARY KEY [index_tipo] (index_col_nombre,...) [index_option] ... | {INDEX|KEY} [index_name] [index_tipo] (index_col_nombre,...) [index_option] ... | [CONSTRAINT [nombre]] UNIQUE [INDEX|KEY] [index_name] [index_tipo] (index_col_nombre,...) [index_option] ... | {FULLTEXT|SPATIAL} [INDEX|KEY] [index_name] (index_col_nombre,...) [index_opción] ... | [CONSTRAINT [nombre]] FOREIGN KEY [index_nombre] (index_col_nombre,...) reference_definition | 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:
Si necesitáis más info sobre los índices UNIQUE, FULLTEXT, INDEX, PRIMARY KEY podéis consultar este post:
En este otro post explico cómo eliminar índices:
Vamos con la sintaxis de las definiciones de columna de la sentencia de CREATE TABLE MySQL
tipo_dato [NOT NULL | NULL] [DEFAULT valor_defecto] [AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY] [COMMENT 'string'] [COLUMN_FORMAT {FIXED|DYNAMIC|DEFAULT}] [STORAGE {DISK|MEMORY|DEFAULT}] [reference_definition]
Os explico las opciones:
Los diferentes tipos de dato de una tabla MySQL son los que ya repasamos en varios post anteriores y que menciono arriba:
La sintaxis sería la siguiente:
BIT[(length)] | TINYINT[(length)] [UNSIGNED] [ZEROFILL] | SMALLINT[(length)] [UNSIGNED] [ZEROFILL] | MEDIUMINT[(length)] [UNSIGNED] [ZEROFILL] | INT[(length)] [UNSIGNED] [ZEROFILL] | INTEGER[(length)] [UNSIGNED] [ZEROFILL] | BIGINT[(length)] [UNSIGNED] [ZEROFILL] | REAL[(length,decimals)] [UNSIGNED] [ZEROFILL] | DOUBLE[(length,decimals)] [UNSIGNED] [ZEROFILL] | FLOAT[(length,decimals)] [UNSIGNED] [ZEROFILL] | DECIMAL[(length[,decimals])] [UNSIGNED] [ZEROFILL] | NUMERIC[(length[,decimals])] [UNSIGNED] [ZEROFILL] | DATE | TIME | TIMESTAMP | DATETIME | YEAR | CHAR[(length)] [BINARY] [CHARACTER SET charset_name] [COLLATE collation_name] | VARCHAR(length) [BINARY] [CHARACTER SET charset_name] [COLLATE collation_name] | BINARY[(length)] | VARBINARY(length) | TINYBLOB | BLOB | MEDIUMBLOB | LONGBLOB | TINYTEXT [BINARY] [CHARACTER SET charset_name] [COLLATE collation_name] | TEXT [BINARY] [CHARACTER SET charset_name] [COLLATE collation_name] | MEDIUMTEXT [BINARY] [CHARACTER SET charset_name] [COLLATE collation_name] | LONGTEXT [BINARY] [CHARACTER SET charset_name] [COLLATE collation_name] | ENUM(value1,value2,value3,...) [CHARACTER SET charset_name] [COLLATE collation_name] | SET(value1,value2,value3,...) [CHARACTER SET charset_name] [COLLATE collation_name] | spatial_type
Aquí os pongo un ejemplo de una sentencia SQL para crear la tabla en una base de datos MySQL:
CREATE TABLE IF NOT EXISTS `clientes` ( `nif` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Clave primaria', `nombre` varchar(50) NOT NULL COMMENT 'nombre cliente', `apellidos` varchar(100) NOT NULL COMMENT 'Apellidos cliente', `telefono` int(9) NOT NULL COMMENT 'móvil', `codigo_postal` int(5) DEFAULT NULL, `edad` int(3) DEFAULT NULL, `sexo` char(1) NOT NULL, `profesion` text NOT NULL, PRIMARY KEY (`nif`), UNIQUE KEY `telefono` (`telefono`), KEY `nombre` (`nombre`), FULLTEXT KEY `apellidos` (`apellidos`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='tabla de clientes';