You are on page 1of 8

Resumen de Sintaxis de comandos DDL de MySQL

Sentencias de definición de datos (Data Definition


Statements)
Sintaxis de CREATE DATABASE

CREATE DATABASE crea una base de datos con el nombre dado. Para usar CREATE DATABASE, necesita el
permiso CREATE en la base de datos.

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name


[create_specification [, create_specification] ...]

create_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name

Las opciones create_specification pueden darse para especificar características de la base de datos.
Las características se almacenan en el fichero db.opt en el directorio de la base de datos.

La cláusula CHARACTER SET especifica el conjunto de caracteres por defecto de la base de datos.

La cláusula COLLATE especifica la colación por defecto de la base de datos.

Puede crear una base de datos usando cualquiera de las siguientes sentencias:

mysql>CREATE DATABASE University;

O:

mysql>CREATE SCHEMA IF NOT EXISTS University;

O:

mysql>CREATE DATABASE IF NOT EXISTS University CHARACTER SET Latin1;

O:

mysql>CREATE SCHEMA University DEFAULT COLLATE latin1_swedish_ci;

Sintaxis de CREATE TABLE


CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
[table_options] [select_statement]

1
Resumen de Sintaxis de comandos DDL de MySQL

O:

CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name


[(] LIKE old_tbl_name [)];

create_definition:
column_definition
| [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
| KEY [index_name] [index_type] (index_col_name,...)
| INDEX [index_name] [index_type] (index_col_name,...)
| [CONSTRAINT [symbol]] UNIQUE [INDEX]
[index_name] [index_type] (index_col_name,...)
| [FULLTEXT|SPATIAL] [INDEX] [index_name] (index_col_name,...)
| [CONSTRAINT [symbol]] FOREIGN KEY
[index_name] (index_col_name,...) [reference_definition]
| CHECK (expr)

column_definition:
col_name type [NOT NULL | NULL] [DEFAULT default_value]
[AUTO_INCREMENT] [UNIQUE [KEY] | [PRIMARY] KEY]
[COMMENT 'string'] [reference_definition]

type:
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
| CHAR(length) [BINARY | ASCII | UNICODE]
| VARCHAR(length) [BINARY]
| TINYBLOB
| BLOB
| MEDIUMBLOB
| LONGBLOB
| TINYTEXT [BINARY]
| TEXT [BINARY]
| MEDIUMTEXT [BINARY]
| LONGTEXT [BINARY]
| ENUM(value1,value2,value3,...)
| SET(value1,value2,value3,...)
| spatial_type

2
Resumen de Sintaxis de comandos DDL de MySQL

index_col_name:
col_name [(length)] [ASC | DESC]

reference_definition:
REFERENCES tbl_name [(index_col_name,...)]
[MATCH FULL | MATCH PARTIAL | MATCH SIMPLE]
[ON DELETE reference_option]
[ON UPDATE reference_option]

reference_option:
RESTRICT | CASCADE | SET NULL | NO ACTION

table_options: table_option [table_option] ...

table_option:
{ENGINE|TYPE} = engine_name
| AUTO_INCREMENT = value
| AVG_ROW_LENGTH = value
| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
| CHECKSUM = {0 | 1}
| COMMENT = 'string'
| MAX_ROWS = value
| MIN_ROWS = value
| PACK_KEYS = {0 | 1 | DEFAULT}
| PASSWORD = 'string'
| DELAY_KEY_WRITE = {0 | 1}
| ROW_FORMAT = {DEFAULT|DYNAMIC|FIXED|COMPRESSED|REDUNDANT|COMPACT}
| RAID_TYPE = { 1 | STRIPED | RAID0 }
RAID_CHUNKS = value
RAID_CHUNKSIZE = value
| UNION = (tbl_name[,tbl_name]...)
| INSERT_METHOD = { NO | FIRST | LAST }
| DATA DIRECTORY = 'absolute path to directory'
| INDEX DIRECTORY = 'absolute path to directory'

select_statement:
[IGNORE | REPLACE] [AS] SELECT ... (Some legal select statement)

engine_name:
| MyISAM
| MEMORY
| MERGE
| InnoDB
| BDB
| EXAMPLE
| NDB Cluster
| ARCHIVE
| CSV
| FEDERATED

Como puede verse, existen muchas formas de crear una tabla; desde formas muy sencillas, hasta las más
complejas, todo depende de la necesidad.

3
Resumen de Sintaxis de comandos DDL de MySQL

Puede crear una tabla sin columnas con la siguiente sentencia:

mysql>CREATE TABLE Book;

O crear una tabla con llave primaria y el motor predeterminado de MySQL:

mysql>CREATE TABLE Book(AuthorId int PRIMARY KEY NOT NULL, Author_FirstName


varchar(35) not null, Author_LastName varchar(35) not null,
Author_DateOfBirth);

Sintaxis de CREATE INDEX


CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
[USING index_type]
ON tbl_name (index_col_name,...)

index_col_name:
col_name [(length)] [ASC | DESC]

En MySQL 5.0, CREATE INDEX se mapea a un comando ALTER TABLE para crear índices.

Sintaxis de CREATE VIEW


CREATE [OR REPLACE] [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW nombre_vista [(columnas)]
AS sentencia_select
[WITH [CASCADED | LOCAL] CHECK OPTION]

Sintaxis de SHOW CREATE VIEW


SHOW CREATE VIEW nombre_vista

Muestra la sentencia CREATE VIEW que se utilizó para crear la vista.

Sintaxis de CREATE TRIGGER


CREATE TRIGGER nombre_disp momento_disp evento_disp
ON nombre_tabla FOR EACH ROW sentencia_disp

Un disparador es un objeto con nombre en una base de datos que se asocia con una tabla, y se activa cuando
ocurre un evento en particular para esa tabla.

El disparador queda asociado a la tabla nombre_tabla. Esta debe ser una tabla permanente, no puede ser una
tabla TEMPORARY ni una vista.

momento_disp es el momento en que el disparador entra en acción. Puede ser BEFORE (antes) o AFTER
(después), para indicar que el disparador se ejecute antes o después que la sentencia que lo activa.

4
Resumen de Sintaxis de comandos DDL de MySQL

evento_disp indica la clase de sentencia que activa al disparador. Puede ser INSERT, UPDATE, o
DELETE. Por ejemplo, un disparador BEFORE para sentencias INSERT podría utilizarse para validar los
valores a insertar.

No puede haber dos disparadores en una misma tabla que correspondan al mismo momento y sentencia. Por
ejemplo, no se pueden tener dos disparadores BEFORE UPDATE. Pero sí es posible tener los disparadores
BEFORE UPDATE y BEFORE INSERT o BEFORE UPDATE y AFTER UPDATE.

sentencia_disp es la sentencia que se ejecuta cuando se activa el disparador. Si se desean ejecutar


múltiples sentencias, deben colocarse entre BEGIN ... END, el constructor de sentencias compuestas. Esto
además posibilita emplear las mismas sentencias permitidas en rutinas almacenadas.

Sintaxis de ALTER DATABASE


ALTER {DATABASE | SCHEMA} [db_name]
alter_specification [, alter_specification] ...

alter_specification:
[DEFAULT] CHARACTER SET charset_name
| [DEFAULT] COLLATE collation_name

ALTER DATABASE le permite cambiar las características globales de una base de datos. Estas características
se almacenan en el fichero db.opt en el directorio de la base de datos. Para usar ALTER DATABASE,
necesita el permiso ALTER en la base de datos.

En MySQL 5.0, el nombre de base de datos puede omitirse. El comando se aplica a la base de datos por defecto.
ALTER SCHEMA puede usarse desde MySQL 5.0.2.

Sintaxis de ALTER TABLE

ALTER TABLE le permite cambiar la estructura de una tabla existente. Por ejemplo, puede añadir o borrar
columnas, crear o destruir índices, cambiar el tipo de columnas existentes, o renombrar columnas o la misma
tabla. Puede cambiar el comentario de la tabla y su tipo.

ALTER [IGNORE] TABLE tbl_name


alter_specification [, alter_specification] ...

alter_specification:
ADD [COLUMN] column_definition [FIRST | AFTER col_name ]
| ADD [COLUMN] (column_definition,...)
| ADD INDEX [index_name] [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] PRIMARY KEY [index_type] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] UNIQUE [index_name] [index_type] (index_col_name,...)
| ADD [FULLTEXT|SPATIAL] [index_name] (index_col_name,...)
| ADD [CONSTRAINT [symbol]] FOREIGN KEY [index_name] (index_col_name,...)
[reference_definition]
| ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT}
| CHANGE [COLUMN] old_col_name column_definition [FIRST|AFTER col_name]
| MODIFY [COLUMN] column_definition [FIRST | AFTER col_name]
| DROP [COLUMN] col_name

5
Resumen de Sintaxis de comandos DDL de MySQL

| DROP PRIMARY KEY


| DROP INDEX index_name
| DROP FOREIGN KEY fk_symbol
| DISABLE KEYS
| ENABLE KEYS
| RENAME [TO] new_tbl_name
| ORDER BY col_name
| CONVERT TO CHARACTER SET charset_name [COLLATE collation_name]
| [DEFAULT] CHARACTER SET charset_name [COLLATE collation_name]
| DISCARD TABLESPACE
| IMPORT TABLESPACE
| table_options

Sintaxis de ALTER VIEW


ALTER [ALGORITHM = {UNDEFINED | MERGE | TEMPTABLE}]
VIEW nombre_vista [(columnas)]
AS sentencia_select
[WITH [CASCADED | LOCAL] CHECK OPTION]

Sintaxis de DROP DATABASE


DROP {DATABASE | SCHEMA} [IF EXISTS] db_name

DROP DATABASE borrar todas las tablas en la base de datos y borrar la base de datos. Sea muy cuidadoso con
este comando! Para usar DROP DATABASE, necesita el permiso DROP en la base de datos.

IF EXISTS se usa para evitar un error si la base de datos no existe.

DROP SCHEMA puede usarse desde MySQL 5.0.2.

Si usa DROP DATABASE en una base de datos enlazada simbólicamente, tanto el enlace como la base de datos
se borran.

DROP DATABASE retorna el número de tablas que se eliminan. Se corresponde con el número de ficheros
.frm borrados.

Sintaxis de DROP INDEX


DROP INDEX index_name ON tbl_name

DROP INDEX borra el índice llamado index_name de la tabla tbl_name. En MySQL 5.0, DROP INDEX
se mapea a comando ALTER TABLE para borrar el índice.

Sintaxis de DROP TABLE


DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...
[RESTRICT | CASCADE]

6
Resumen de Sintaxis de comandos DDL de MySQL

DROP TABLE borra una o más tablas. Debe tener el permiso DROP para cada tabla. Todos los datos de la
definición de tabla son borrados, así que tenga cuidado con este comando!

Use IF EXISTS para evitar un error para tablas que no existan. Un NOTE se genera para cada tabla no
existente cuando se usa IF EXISTS.

Sintaxis de DROP VIEW


DROP VIEW [IF EXISTS]
nombre_vista [, nombre_vista] ...
[RESTRICT | CASCADE]

DROP VIEW elimina una o más vistas de la base de datos. Se debe poseer el privilegio DROP en cada vista a
eliminar.

La cláusula IF EXISTS se emplea para evitar que ocurra un error por intentar eliminar una vista inexistente.
Cuando se utiliza esta cláusula, se genera una NOTE por cada vista inexistente.

Sintaxis de DROP TRIGGER


DROP TRIGGER [nombre_esquema.]nombre_disp

Elimina un disparador. El nombre de esquema es opcional. Si el esquema se omite, el disparador se elimina en


el esquema actual.

Anteriormente a la versión 5.0.10 de MySQL, se requería el nombre de tabla en lugar del nombre de esquema.

(nom_tabla.nom_disp).

Nota: cuando se actualice desde una versión anterior de MySQL 5 a MySQL 5.0.10 o superior, se deben
eliminar todos los disparadores antes de actualizar y volver a crearlos después, o DROP TRIGGER no
funcionará luego de la actualización.

La sentencia DROP TRIGGER necesita que se posea el privilegio SUPER, que se introdujo en MySQL 5.0.2.

Sintaxis de RENAME TABLE


RENAME TABLE tbl_name TO new_tbl_name
[, tbl_name2 TO new_tbl_name2] ...

Este comando renombra una o más tablas.

La operación de renombrar se hace automáticamente, lo que significa que ningún otro flujo puede acceder a
ninguna de las tablas mientras se ejecuta el renombrado. Por ejemplo, si tiene una tabla existente old_table,
puede crear otra tabla new_table con la misma estructura pero vacía, y luego reemplazar la tabla existente
con la vacía como sigue:

CREATE TABLE new_table (...);

7
Resumen de Sintaxis de comandos DDL de MySQL

RENAME TABLE old_table TO backup_table, new_table TO old_table;

Si el comando renombra más de una tabla, las operaciones de renombrado se realizan de izquierda a derecha. Si
quiere intercambiar dos nombres de tablas, puede hacerlo así (asumiendo que no existe ninguna tabla llamada
tmp_table):

RENAME TABLE old_table TO tmp_table,


new_table TO old_table,
tmp_table TO new_table;

Mientras haya dos bases de datos en el mismo sistema de ficheros puede renombrar una tabla para moverla de
una base de datos a otra:

RENAME TABLE current_db.tbl_name TO other_db.tbl_name;

Cuando ejecuta RENAME, no puede tener ninguna tabla bloqueada o transacciones activas. Debe tener los
permisos ALTER y DROP en la tabla original, y los permisos CREATE y INSERT en la nueva tabla.

Si MySQL encuentra cualquier error en un renombrado múltiple, hace un renombrado inverso para todas las
tablas renombradas para devolver todo a su estado original.

You might also like