MySQL - DDL
MySQL - DDL
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_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.
Puede crear una base de datos usando cualquiera de las siguientes sentencias:
O:
O:
O:
1
Resumen de Sintaxis de comandos DDL de MySQL
O:
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_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
index_col_name:
col_name [(length)] [ASC | DESC]
En MySQL 5.0, CREATE INDEX se mapea a un comando ALTER TABLE para crear índices.
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.
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.
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_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 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.
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.
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.
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.
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.
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.
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:
7
Resumen de Sintaxis de comandos DDL de MySQL
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):
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:
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.