Está en la página 1de 13

MySQL Lenguajes SQL

ndice Lenguaje de Definicin de Datos........................................................................1 Introduccin.........................................................................................................................................................1 Sentencias de definicin de datos (Data Definition Statements).........................................................................1 Sintaxis de CREATE DATABASE................................................................................................................1 Sintaxis de CREATE INDEX ........................................................................................................................2 Sintaxis de CREATE TABLE.........................................................................................................................2 Clonar una tabla usando SELECT...................................................................................................................7 Ejemplos de duplicado de tablas usando SELECT........................................8 Clonar una tabla usando LIKE........................................................................................................................8 Sintaxis de ALTER DATABASE...................................................................................................................8 Sintaxis de ALTER TABLE............................................................................................................................8 Sintaxis de DROP DATABASE...................................................................................................................11 Sintaxis de DROP INDEX............................................................................................................................11 Sintaxis de DROP TABLE............................................................................................................................11 Sintaxis de RENAME TABLE......................................................................................................................12

Lenguaje de Definicin de Datos


Introduccin
Un lenguaje de definicin de datos (Data Definition Language, DDL por sus siglas en ingls) es un lenguaje proporcionado por el sistema de gestin de base de datos que permite a los usuarios llevar a cabo las tareas de definicin de las estructuras que almacenarn los datos as como de los procedimientos o funciones que permitan consultarlos.

El lenguaje de programacin SQL, el ms difundido entre los gestores de bases de datos, admite las siguientes sentencias de definicin: CREATE, DROP y ALTER, cada una de las cuales se puede aplicar a las tablas, vistas, procedimientos almacenados y triggers de la base de datos.

Otras que se incluyen dentro del DDL, pero que su existencia depende de la implementacin del estndar SQL que lleve a cabo el gestor de base de datos son GRANT y REVOKE, los cuales sirven para otorgar permisos o quitarlos, ya sea a usuarios especficos o a un rol creado dentro de la base de datos.

Sentencias de definicin de datos (Data Definition Statements)


Sintaxis de CREATE DATABASE
CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name [create_specification [, create_specification] ...]

create_specification: [DEFAULT] CHARACTER SET charset_name | [DEFAULT] COLLATE collation_name Crea una base de datos con el nombre dado. Para usar CREATE DATABASE, necesita el permiso CREATE en la base de datos. Ocurre un error si la base de datos existe y no especifica IF NOT EXISTS. A partir de la versin 5, las opciones create_specification pueden darse para especificar caracterstica de la base de datos. Tema 8

MySQL Lenguajes SQL

La clusula CHARACTER SET cambia el conjunto de caracteres(smbolos y codificaciones) por defecto de la base de datos. La clusula COLLATE cambia la colacin(conjunto de reglas para comparar caracteres en un conjunto de caracteres) por defecto de la base de datos. Las bases de datos en MySQL se implementan como directorios que contienen ficheros que se corresponden a tablas en la base de datos. Como no hay tablas en la base de datos cuando se crean inicialmente, el comando CREATE DATABASE en MySQL 5.0 crea slo un directorio bajo el directorio de datos de MySQL y el fichero db.opt file. CREATE SCHEMA puede usarse desde MySQL 5.0.2.

Sintaxis de CREATE INDEX


Se estudiar en el tema ndices y optimizacin de consultas.

Sintaxis de CREATE TABLE


CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)] [table_options] [select_statement]
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) directiva que funciona SOLO en Oracle pero admitida por MySQL

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
Tema 8

MySQL Lenguajes SQL

| 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
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 /*Las opciones ON DELETE y ON UPDATE establecen el comportamiento del gestor en caso de que las filas de la tabla padre se borren o actualicen. Los comportamientos pueden ser: RESTRICT., CASCADE, la operacin se propaga en cascada a la tabla hija. SET NULL, se establece a NULL la clave fornea afectada por un borrado o modificacin de la tabla padre. NO ACTION (valor por defecto), impide que la operacin se realice en la tabla hija.*/
table_options: table_option [table_option] ... table_option:

{ENGINE|TYPE} = engine_name /*El almacenamiento fsico de una tabla en MySQL esta controlada por un SW
denominado Motor de almacenamiento. Mediante la opcin ENGINE=nombre_motor se indica el motor de almacenamiento para la tabla. Puede ser entre otros:

innodb (permite bloqueo de registros y claves forneas) myIsam (genera tablas que operan a gran velocidad pero sin control de integridad referencial memory (genera tablas almacenadas en memoria en lugar de un archivo fsico)*/ | AUTO_INCREMENT = value /*Permite indicar el valor inicial para campos de tipo AUTO_INCREMENT. Este tipo de
campos SIEMPRE debe ser numrico*/

| AVG_ROW_LENGTH = value
Tema 8

MySQL Lenguajes SQL

| [DEFAULT] CHARACTER SET charset_name /* Especifica el conjunto caracteres para la tabla*/ [COLLATE collation_name] /*Define la colacin por defecto de la tabla*/ | CHECKSUM = {0 | 1} | COMMENT = 'string' /*Permite crear un comentario. Mximo 60 caracteres*/ | MAX_ROWS = value /*Indica el nmero mximo de registros que se quieren almacenar. No es un lmite
absoluto*/

| MIN_ROWS = value /*Indica el nmero mnimo de registros que se quieren almacenar. No es un lmite
absoluto*/

| PACK_KEYS = {0 | 1 | DEFAULT} | PASSWORD = 'string' | DELAY_KEY_WRITE = {0 | 1} | ROW_FORMAT = {DEFAULT|DYNAMIC|FIXED|COMPRESSED} | 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)

CREATE TABLE crea una tabla con el nombre dado. Debe tener el permiso CREATE para la tabla. En MySQL 5.0, el nombre de tabla puede especificarse como db_name.tbl_name para crear la tabla en la base de datos especfica. Esto funciona haya una base de datos actual o no. Si usa identificadores entre comillas, entrecomille el nombre de base de datos y de tabla por separado. Por ejemplo, `mydb`.`mytbl` es legal, pero `mydb.mytbl` no. Puede usar la palabra TEMPORARY al crear una tabla temporal. Una tabla TEMPORARY es visible slo para la conexin actual, y se borra automticamente cuando la conexin se cierra. En MySQL 5.0, debe tener el permiso CREATE TEMPORARY TABLES para crear tablas temporales. MySQL 5.0 soporta las palabras IF NOT EXISTS para que no ocurra un error si la tabla existe. MySQL representa cada tabla mediante un fichero .frm de formato de tabla (definicin) en el directorio de base de datos. El motor para la tabla puede crear otros ficheros tambin. En el caso de tablas MyISAM, el motor crea ficheros ndice y de datos. Por lo tanto, para cada tabla MyISAM tbl_name, hay tres ficheros de disco:

Si no se especifica NULL ni NOT NULL, la columna se trata como si se especificara NULL. Una columna entera puede tener el atributo adicional AUTO_INCREMENT. Cuando inserta un valor de NULL (recomendado) o 0 en una columna AUTO_INCREMENT se asigna al siguiente valor de secuencia que es value+1, donde value es el valor inicial para AUTO_INCREMENT que suele ser 1. Slo puede haber una columna AUTO_INCREMENT por tabla, debe estar indexada, y no puede tener un valor DEFAULT. Una columna AUTO_INCREMENT funciona correctamente slo si contiene slo valores positivos.

Tema 8

MySQL Lenguajes SQL

En MySQL 5.0, las definiciones de columnas de caracteres puede incluir un atributo CHARACTER SET para especificar el conjunto de caracteres y, opcionalmente, una colacin para la columna (COLLATE).

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);

La clusula DEFAULT especifica el valor por defecto para una columna: o El valor por defecto debe ser constante, no puede ser una funcin o una expresin. Desde MySQL 5.0.2, si una definicin de columna no incluye valor DEFAULT explcito , MySQL determina el valor por defecto como sigue: Si la columna puede tener NULL como valor, la columna se define con una clusula DEFAULT NULL explcita. Si la columna no puede tener valores NULL, MySQL define la columna sin clusula DEFAULT explcita. Un comentario para una columna puede especificarse en MySQL 5.0 con la opcin COMMENT. En MySQL 5.0, el atributo SERIAL puede usarse como un alias para BIGINT UNSIGNED NOT NULL AUTO_INCREMENT UNIQUE. KEY normalmente es sinnimo para INDEX. En MySQL 5.0, el atributo clave PRIMARY KEY puede especificarse como KEY cuando se da en una definicin de columna. Esto se implement por compatibilidad con otros sistemas de bases de datos. En MySQL, un ndice UNIQUE es un ndice en que todos los valores en el ndice deben ser distintos. La excepcin es que una columna en el ndice puede contener mltiple valores NULL. Esta excepcin no se aplica a tablas BDB, en las que slo se permita un NULL. Una PRIMARY KEY es una KEY nica donde todas las columnas de la clave deben definirse como NOT NULL. Si no se declaran explcitamente como NOT NULL, MySQL las declara implcitamente (y sin decirlo). Una tabla puede tener slo una PRIMARY KEY. Si no tiene una PRIMARY KEY y una aplicacin pide una PRIMARY KEY en sus tablas, MySQL retorna el primer ndice UNIQUE que no tenga columnas NULL. En la tabla creada, una PRIMARY KEY se guarda en primer lugar, seguida por todos los ndices UNIQUE, y luego los ndices no nicos. Una PRIMARY KEY puede ser un ndice de mltiples columnas. Si un ndice PRIMARY KEY o UNIQUE consiste slo de una columna que tenga un tipo entero, puede referirse a la columna como _rowid en comandos SELECT. En MySQL 5.0, las tablas InnoDB soportan el chequeo de restricciones de claves forneas. o Las columnas en la tabla referenciada debe siempre nombrarse explcitamente. Soporta tanto acciones ON DELETE como ON UPDATE en MySQL 5.0. Para otros motores de almacenamiento, MySQL Server permite la sintaxis FOREIGN KEY y REFERENCES y CHECK, pero no surge efecto.

o o

La parte table_options de la sintaxis CREATE TABLE puede usarse desde MySQL 3.23.

o o

Las opciones ENGINE y TYPE especifican el motor de almacenamiento para la tabla. ENGINE es el nombre preferido para la opcin en MySQL 5.0, y TYPE est obsoleto aunque todava puede usarse en MySQL 5.1. Para ver las opciones ENGINE y TYPE ejecutar el comando SHOW ENGINES; Las siguientes opciones de tabla (table_options) se usan para optimizar el comportamiento de la tabla. En la mayora de casos, no tiene que especificar ninguna de ellas. La opcin funciona para todos los motores a no ser que se indique lo contrario:

Tema 8

MySQL Lenguajes SQL

AUTO_INCREMENT

El valor inicial para AUTO_INCREMENT. A partir de MySQL 5.0, funciona para tablas MyISAM, MEMORY e InnoDB.

AVG_ROW_LENGTH

Indica una aproximacin de la longitud media de registro para su tabla. Necesita inicializarla slo para tablas grandes con registros de longitud variable. Cuando se crea una tabla MyISAM, MySQL usa (MAX_ROWS *

AVG_ROW_LENGTH) para decidir el tamao de la tabla resultante. Si no las especfica, el tamao mximo para la tabla es el valor de myisam_max_sort_file_size aproximadamente 100GB de datos (4GB antes de MySQL 5.0.6). (Si su sistema operativo no soporta ficheros de este tamao, los tamaos de fichero se restringen al lmite del sistema operativo.)

[DEFAULT] CHARACTER SET

Especifica el conjunto de caracteres para la tabla. CHARSET es un sinnimo.

COLLATE

Especifica la colacin por defecto de la tabla. Por defecto si no lo especificamos al crear una nueva base de datos se selecciona el predeterminado por la base de datos y ste a su vez est predeterminado por el idioma que tengamos seleccionado en el sistema operativo donde instalamos el servidor de bases de datos.

CHECKSUM

Se utiliza para chequear los registros de una tabla en el comando check checksum. Con valor 1 calcula el checksum para todos los registros. Esto hace que la tabla tenga actualizaciones ms lentas, pero hace ms fcil encontrar tablas corruptas.

COMMENT

Un comentario para su tabla, hasta 60 caracteres.

MAX_ROWS

Mximo nmero de registros que planea almacenar en la tabla. No es un lmite absoluto, sino un indicador que la tabla debe ser capaz de almacenar al menos estos registros.

MIN_ROWS

Mnimo nmero de registros que planea almacenar en la tabla.

PACK_KEYS

Ponga esta opcin a 1 si quiere tener ndices ms pequeos. Las actualizaciones sean ms lentas y las lecturas ms rpidas. Poner esta opcin a 0 deshabilita la compresin de claves.

Ponerla a DEFAULT le dice al motor que comprima slo columnas CHAR/VARCHAR. Tema 8

MySQL Lenguajes SQL

Si no usa PACK_KEYS, por defecto se comprimen slo cadenas, no nmeros. Si usa PACK_KEYS=1, tambin se empaquetan nmeros.

PASSWORD

Encripta el fichero .frm con una contrasea. Esta opcin no hace nada en la versin estndar de MySQL.

DELAY_KEY_WRITE

Con valor a 1 si se quiere retardar actualizaciones de clave para la tabla hasta que la tabla se cierra.

ROW_FORMAT

Define cmo deben almacenarse los registros. Actualmente esta opcin slo funciona con tablas MyISAM. El valor de la opcin puede ser FIXED o DYNAMIC para formato de longitud esttica o variable. myisampack cambia el tipo a COMPRESSED.

UNION

UNION se usa cuando quiere usar una coleccin de tablas idnticas como una tabla tipo MERGE.

En MySQL 5.0, debe tener permisos SELECT, UPDATE, y DELETE para las tablas mapeadas en una tabla MERGE. (Nota: Originalmente, todas las tablas usadas tenan que estar en la misma base de datos que la tabla MERGE. Esta restriccin se ha eliminado).

INSERT_METHOD

Si quiere insertar datos en una tabla MERGE debe especificarlo con INSERT_METHOD en la tabla en que se debe insertar el registro. INSERT_METHOD es una opcin til para tablas MERGE slo. Use un valor de FIRST o LAST para que las inserciones vayan a la primera o ltima tabla, o un valor de NO para evitar inserciones.

DATA DIRECTORY, INDEX DIRECTORY

Usando DATA DIRECTORY='directory' o INDEX DIRECTORY='directory' puede especificar dnde debe el motor MyISAM guardar un fichero de datos e ndice de una tabla. Tenga en cuenta que el directorio debe ser una ruta completa al directorio (no una ruta relativa).

Clonar una tabla usando SELECT


La sentencia de creacin CREATE TABLE (..) SELECT nos permite crear la tabla con los registros que devuelva la consulta de seleccin, pero tiene las siguientes limitaciones:

No traspasa las restricciones de tipo PRIMARY KEY. No traspasa las definiciones de AUTO_INCREMENT. No traspasa las definiciones de DEFAULT CURRENT_TIMESTAMP Utiliza el storage engine por defecto y no el de la tabla (en caso de que sean distintos) Solamente traspasa los registros afectados por la SELECT, que podra no devolver ninguno y crear la tabla vaca. Tema 8

MySQL Lenguajes SQL Ejemplos de duplicado de tablas usando SELECT La tabla origen ser la siguiente: CREATE TABLE tabla_origen ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, descripcion VARCHAR(30), fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE = MyISAM;

Usando esta sentencia, duplicaramos la tabla, tanto su estructura como sus registros: CREATE TABLE clone_select SELECT * FROM tabla_origen;

Clonar una tabla usando LIKE


Si se usa la sentencia CREATE TABLE (..) LIKE, se crear una tabla vaca que conserva la estructura de la original, pero no los registros. La tabla origen ser la siguiente:

CREATE TABLE tabla_origen ( id INT AUTO_INCREMENT NOT NULL PRIMARY KEY, descripcion VARCHAR(30), fecha TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP) ENGINE = MyISAM;
Utilizando esta sentencia, clonaremos la tabla, pero no su contenido:

CREATE TABLE clone_like LIKE tabla_origen; Query OK, 0 rows affected (0.02 sec)

Sintaxis de ALTER DATABASE


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

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

Permite cambiar las caractersticas globales de una base de datos. Estas caractersticas 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. La clusula CHARACTER SET y COLLATE funcin igual que para CREATE.

Sintaxis de ALTER TABLE


ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ...

alter_specification: ADD [COLUMN] column_definition [FIRST | AFTER col_name ] Tema 8

MySQL Lenguajes SQL | 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 | 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

index_col_name: col_name [(length)] [ASC | DESC] index_type: USING {BTREE | HASH}

ALTER TABLE le permite cambiar la estructura de una tabla existente: Aadir o borrar columnas o ndices. Cambiar el tipo de columnas existentes. Renombrar columnas.

La sintaxis para varias de las alteraciones permitidas es similar a clusulas del comando CREATE TABLE. Esto incluye modificaciones

table_options, para opciones tales como ENGINE, AUTO_INCREMENT, y AVG_ROW_LENGTH.

Algunas operaciones pueden producir advertencias si se intentan en una tabla para que el motor de almacenamiento no soporte la operacin. Estas advertencias pueden mostrarse con SHOW WARNINGS. Algunas alteraciones pueden ejecutarse y no surgir efecto. Utilizar el comando DESCRIBE. ALTER TABLE funciona creando una copia temporal de la tabla original. La alteracin se realiza en la copia, luego la tabla original se borra y se renombra la nueva. Mientras se ejecuta ALTER TABLE la tabla original es legible por otros clientes. Las actualizaciones y escrituras en la tabla se esperan hasta que la nueva tabla est lista, luego se redirigen automticamente a la nueva tabla si no se han producido actualizaciones fallidas.

Para usar ALTER TABLE, necesita ALTER, INSERT, y permisos CREATE para la tabla.

Tema 8

MySQL Lenguajes SQL

10

IGNORE es una extensin MySQL a SQL estndar. Controla cmo funciona ALTER TABLE si hay duplicados en las claves primarias en la nueva tabla o si ocurren advertencias cuando est activo el modo STRICT.

o o

Si no se especifica IGNORE la copia se aborta y no se ejecuta si hay errores de clave duplicada. Si se especifica IGNORE, los registros conflictivos se borran.

Puede ejecutar mltiples clusulas ADD, ALTER, DROP, y CHANGE en un nico comando ALTER TABLE.

ALTER TABLE t2 DROP COLUMN c, DROP COLUMN d;

CHANGE col_name, DROP col_name, y DROP INDEX son extensiones MySQL al estndar SQL. MODIFY es una extensin de Oracle a ALTER TABLE. La palabra COLUMN es opcional y puede omitirse. Si usa ALTER TABLE tbl_name RENAME TO new_tbl_name sin ninguna otra opcin, MySQL simplemente renombra cualquier fichero que se corresponda a la tabla tbl_name. No es necesario crear una tabla temporal.

Las clusulas column_definition usan la misma sintaxis para ADD y CHANGE as como CREATE TABLE. Tenga en cuenta que esta sintaxis incluye el nombre de la columna, no slo el tipo. Puede renombrar una columna usando CHANGE old_col_name column_definition. Para ello, especifique el nombre de columna viejo y nuevo y el tipo de la columna actual. Por ejemplo, para renombrar una columna INTEGER de a a b, puede hacer:

ALTER TABLE t1 CHANGE a b INTEGER;

Si quiere cambiar el tipo de una columna y el nombre, la sintaxis CHANGE necesita un nombre viejo y nuevo de columna, incluso si son iguales. Por ejemplo:

ALTER TABLE t1 CHANGE b b BIGINT NOT NULL;

Puede usar MODIFY para cambiar el tipo de una columna sin renombrarla:

ALTER TABLE t1 MODIFY b BIGINT NOT NULL;


Cuando cambia un tipo de columna usando CHANGE o MODIFY, MySQL intenta convertir valores de columna existentes al nuevo tipo lo mejor posible.

En MySQL 5.0, puede usar FIRST o AFTER col_name para aadir una columna a una posicin especfica. Por defecto se aade al final. Puede usar FIRST y AFTER en operaciones CHANGE o MODIFY en MySQL 5.0. ALTER COLUMN especifica un nuevo valor por defecto para una columna o borra el antiguo valor por defecto. Si el antiguo valor por defecto se borra y la columna puede ser NULL, el nuevo valor por defecto es NULL. Si la columna no puede ser NULL, MySQL asigna un valor por defecto, como se describe en la sintaxis de CREATE TABLE.

DROP INDEX borra un ndice. Si las columnas se borran de una tabla, las columnas tambin se borran de cualquier ndice del que formaran parte. Si todas las columnas que crean un ndice se borran, tambin se borra el ndice. Si una tabla contiene slo una columna, la columna no puede borrarse. Si lo que quiere es borrar la tabla, use DROP TABLE. DROP PRIMARY KEY borra el ndice primario. Nota: En versiones anteriores de MySQL, si no existe clave primaria, entonces DROP PRIMARY KEY borrara el primer ndice UNIQUE de la tabla. Esto ya no es as en MySQL 5.0, cuando trata de usar DROP PRIMARY KEY en una tabla sin clave primaria dara lugar a un error. Tema 8

MySQL Lenguajes SQL

11

Si aade UNIQUE INDEX o PRIMARY KEY a una tabla, se almacena antes que cualquier ndice no nico para que MySQL pueda detectar claves duplicadas tan rpido como sea posible.

ORDER BY le permite crear la nueva tabla con los registros en un orden especfico. Tenga en cuenta que la tabla no queda en este orden tras las inserciones y borrados. Si usa ALTER TABLE en una tabla MyISAM, todos los ndices no nicos se crean en un batch separado (como para REPAIR TABLE). Esto debe hacer ALTER TABLE mucho ms rpido cuando tiene muchos ndices. En MySQL 5.0, esta caracterstica puede activarse explcitamente:

ALTER TABLE ... DISABLE KEYS le dice a MySQL que pare de actualizar ndices no nicos para una tabla MyISAM. ALTER TABLE ... ENABLE KEYS debe usarse para recrear ndices perdidos.

Usar ALTER TABLE ... DISABLE KEYS requiere del permiso INDEX adems de los permisos mencionados anteriormente. En MySQL 5.0, InnoDB soporta el uso de ALTER TABLE para borrar claves forneas:

ALTER TABLE yourtablename DROP FOREIGN KEY fk_symbol;


Si quiere cambiar el conjunto de caracteres por defecto de la tabla y todas las columnas de caracteres (CHAR, VARCHAR, TEXT) a un nuevo conjunto de caracteres, use un comando como:

ALTER TABLE tbl_name CONVERT TO CHARACTER SET charset_name;

Sintaxis de DROP DATABASE


DROP {DATABASE | SCHEMA} [IF EXISTS] db_name


borrados.

DROP DATABASE borrar todas las tablas en la base de datos y borrar la base de datos. CUIDADO!. 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. DROP DATABASE retorna el nmero de tablas que se eliminan. Se corresponde con el nmero de ficheros .frm

El comando DROP DATABASE borrar del directorio de base de datos: Los ficheros y directorios que MySQL puede crear durante operaciones normales. El fichero db.opt , si existe. Si permanecen otros ficheros o directorios en el directorio de la base de datos tras que MySQL borre los ficheros listados, el directorio de base de datos no puede borrarse. En este caso, debe borrar cualquier fichero restante manualmente y realizar el comando DROP DATABASE de nuevo.

Sintaxis de DROP INDEX


Se estudiar en el tema ndices y optimizacin de consultas.

Sintaxis de DROP TABLE


DROP [TEMPORARY] TABLE [IF EXISTS]
tbl_name [, tbl_name] ...

[RESTRICT | CASCADE]

Tema 8

MySQL Lenguajes SQL

12

o
o

DROP TABLE borra una o ms tablas. Debe tener el permiso DROP para cada tabla. Todos los datos de la definicin de tabla son borrados, as que tenga cuidado con este comando! Use IF EXISTS para evitar un error para tablas que no existan. RESTRICT y CASCADE se permiten para hacer la portabilidad ms fcil. De momento, no hacen nada. DROP TABLE hace un commit automticamente con la transaccin activa, a no ser que use la palabra TEMPORARY. La palabra TEMPORARY tiene el siguiente efecto: El comando slo borra tablas TEMPORARY. El comando no acaba una transaccin en marcha. No se comprueban derechos de acceso. (Una tabla TEMPORARY es visible slo para el cliente que la ha creado, as que no es necesario.)

o o

Usar TEMPORARY es una buena forma de asegurar que no borra accidentalmente una tabla no TEMPORARY.

Sintaxis de RENAME TABLE


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

Este comando renombra una o ms tablas. No se puede realizar ninguna operacin sobre la tabla 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 vaca, y luego reemplazar la tabla existente con la vaca como sigue:

CREATE TABLE new_table (...); RENAME TABLE old_table TO backup_table, new_table TO old_table;

Si el comando renombra ms 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 e INSERT en la nueva tabla. Si MySQL encuentra cualquier error en un renombrado mltiple, hace un renombrado inverso para todas las tablas renombradas para devolver todo a su estado original.

Tema 8

MySQL Lenguajes SQL

13

Tema 8

También podría gustarte