Mysql – Sentencias DML en MySQL

Written by lopezatienza on 14/05/2009 – 12:05 -

SENTENCIAS DML EN MySQL


Introducción de registros en las tablas (INSERT)

En el caso de agregación de nuevas filas de datos a las tablas ya existentes, la sentencia básica es INSERT. La sentencia INSERT agrega una o más filas nuevas a una tabla. Tratada de forma simplificada, INSERT tiene la siguiente forma:

INSERT [LOW_PRIORITY|DELAYED] [IGNORE] INTO nombre_tabla [(lista_columnas)] VALUES (valores_de_datos);

La sentencia hace que la lista valores_de_datos se inserte como una o más filas en la tabla que se nombre ( los elementos de la lista se separan por comas). Lista_columnas es una lista separada por comas de los nombres de las columnas que se puede utilizar para especificar las columnas para las que se suministran datos. Si lista_columnas no enumera todas las columnas de la tabla, se inserta NULL (o el valor predeterminado si se ha definido alguno para la columna) en las columnas que no estén en la lista. Todas las columna no citadas en la lista de columnas deben permitir valores NULL o tener un valor predeterminado asignado. Los valores_de_datos dados deben corresponderse con el lista de columnas. El número de valores de datos debe ser el mismo que el número de columnas y el tipo de datos, precisión y escala de cada valor de datos debe coincidir con los de la columna correspondiente.

Si no se especifica lista_columnas se asume que el usuario va a introducir los datos de todas las columnas correspondientes al registro (y no de algunas en particular como estábamos explicando anteriormente), por lo que la sintaxis quedaría:

INSERT [LOW_PRIORITY|DELAYED] [IGNORE] INTO nombre_tabla VALUES (valores_de_datos);

LOW PRIORITY hace que INSERT espere a que ningún cliente esté leyendo la tabla. DELAYED hace que las filas se sitúen en la cola para insertarlas posteriormente. IGNORE evita que se duplique valores de claves únicas sin error.

Nota: LOW_PRIORITY, DELAYED E IGNORE son cláusulas opcionales en el INSERT.

Como ejemplo de inserción de registro en MySQL crearemos la siguiente tabla:

Es una tabla que contiene información de la plantilla de empleados de una empresa.

Para insertar valores en la tabla podríamos utilizar las siguientes instrucciones:

Introducción de registros en las tablas mediante fichero

A continuación, veremos cómo es posible crear la base de datos EMPRESA, e introducir en ella sus tablas y registros utilizando la interfaz de MySQL.

Partimos de la existencia de un fichero ASCII de nombre empresa.sql que contiene todo el código SQL para crear las tablas de la base de datos y que está situado en el subdirectorio c:\MySQL\bin. El código se puede escribir en el fichero con cualquier editor de texto (edit, wordpad…). El fichero debe guardarse con la extensión sql.

En la siguiente figura se presenta el contenido del fichero ASCII empresa.sql. El contenido es exactamente el código SQL para la creación de las tabas y la introducción en ellas de sus registros.

Nota: Hay que destacar llegados a este punto, que esta forma de introducir datos en una tabla, solo tiene éxito si se invoca desde la línea de comandos a la base de datos (debemos de crearla previamente)  antes de introducir el código del fichero. En cualquier otro caso fallaría, puesto que no estamos “usando” la base de datos.

Acudiendo ya a la práctica sobre el entorno de MySQL, el primer paso es la creación de la base de datos EMPRESA desde la línea de comandos de MySQL:

A continuación, se teclea Quit sobre la línea de comandos y se sale de MySQL. La siguiente tarea es situarse en el subdirectorio c:\mysql\bin y teclear la sintaxis:

Al pulsar Enter, se añade la tabla Clientes y sus registros a la base de datos. Es importante introducir en ese comando, la base de datos en la que queremos que se ejecute el código introducido en empresa.sql. Si no introducimos el nombre de la base de datos (empresa) aparecerá el siguiente error:

Una vez ejecutado correctamente el comando, podemos observar que no nos conectamos al servidor de MySQL, sino que nos aparece el shell  c:\mysql\bin>, esperando que realicemos una conexión. Por lo tanto, la utilización del comando es la de crear tablas e introducir datos, en ningún caso, conectarnos al servidor. Si quisiéramos conectarnos al servidor, volveríamos a introducir el comando que ya conocemos para la conexión (mysql –u root).

Incorporar datos externos a tablas MySQL con LOAD DATA

La sentencia SQL LOAD DATA lee los registros de un archivo y los carga como un volumen en una tabla. Esta sentencia es más rápida que INSERT. Su sintaxis general es la siguiente:

LOAD DATA [LOW_PRIORITY] [LOCAL] INFILE ‘nombre_fichero’
[IGNORE | REPLACE]
INTO TABLE nombre_tabla
Opciones_importación
[IGNORE n LINES]

LOW_PRIORITY retrasa la sentencia hasta que ningún cliente esté leyendo de la tabla. LOCAL hace que el cliente lea el archivo en el host del cliente y envíe su contenido por la red al servidor. IGNORE provoca que las filas que duplican valores en un índice único sean ignoradas, mientras que REPLACE provoca que sean reemplazadas las existentes.

Las opciones de importación pueden tener la siguiente sintaxis:

[FIELDS
[TERMINATED BY ‘cadena’]
[LINES TERMINATED BY ‘cadena’]

Si se una FIELDS hay que especificar TERMINATED BY (describe el carácter o caracteres que delimitan valores dentro de una fila). FIELDS siempre debe preceder a LINES. LINES TERMINATED BY especifica un carácter o caracteres que significan el final de las líneas. Si no se especifican ni FIELDS ni LINES, los valores por defecto quedarán como si se hubiesen especificado de la siguiente manera:

FIELDS
TERMINATED BY ‘\t’
LINES TERMINATED BY ‘\n’

La sintaxis anterior indica que por defecto los campos dentro de una línea están delimitados por tabulaciones sin estar acotados, el carácter de escape es la barra invertida y el carácter de final de línea es \n (una línea se acaba cuando empieza otra nueva).

El conjunto de caracteres que pueden utilizarse es el siguiente:

Carácter Significado
\0 ASCII 0
\b Retroceso
\n Línea Nueva
\r Retorno de carro
\s Espacio
\t Tabulador
\’ Comilla simple
\’’ Comilla doble
\\ Barra invertida

La sintaxis INGORE n LINES indica que se descartan las primeras n líneas del archivo de entrada de datos.

En la práctica suele disponerse para las tabla de ficheros de texto delimitado por tabulaciones creados en Windows que usan el separador de columna predeterminado y cuyas líneas suelen concluir en el par de caracteres de retorno de carro y nueva línea. Por lo tanto la sintaxis de lectura de los datos de este tipo de ficheros para la tabla sería la siguiente:

LOAD DATA LOCAL INFILE “fichero.txt” INTO TABLE nombre_tabla;

Nota: Se han detectado errores en la inserción de datos en las tablas mediante el comando LOAD DATA, cuando el editor utilizado es “EDIT”. Dicho editor introduce los caracteres de tabulador de manera errónea y MySQL no es capaz de identificarlos y por lo tanto introduce NULL en los campos. A partir de este momento utilizar el editor MFC WordPad para escribir los datos en el documento de texto. En sistemas operativos como UNIX y LINUX, no se han detectado errores de este tipo en ninguno de sus editores.

Eliminar datos de tablas. La sentencia DELETE

En el caso de la eliminación de filas de datos en tablas ya existentes, la sentencia básica es DELETE. La sentencia DELETE quita una o varias filas de una tabla. Una forma simplificada de la sintaxis de DELETE es:

DELETE [LOW_PRIORITY] FROM tabla [WHERE condición]

El argumento tabla nombra  la tabla de la que se van a eliminar las filas. Se eliminan todas las filas de tabla que reúnan los requisitos de la condición de búsqueda de la cláusula WHERE.

Si no se especifica la cláusula WHERE, se eliminarán todas las filas de tabla. LOW_PRIORITY indica que no se ejecuta el borrado hasta que ningún cliente esté leyendo la tabla.

Por ejemplo, en la base de datos EMPRESA, en la tabla Clientes, la sentencia siguiente borra todas las filas:

DELETE FROM clientes;

La siguiente consulta borra todos los clientes cuyo límite de crédito sea 1000:

DELETE FROM clientes where limitecredito =1000;

Actualizar datos de tablas. La sentencia UPDATE

La instrucción UPDATE puede cambiar los valores de filas individuales, grupos de filas o todas las filas de una tabla o vista. Una instrucción UPDATE que haga referencia a una tabla o vista sólo puede cambiar los datos de una tabla a la vez.

La sintaxis más sencilla de la sentencia UPDATE es la siguiente:

UPDATE [LOW_PRIORITY] tabla
SET columna =expresión, columna=expresión….
WHERE condición

La sentencia UPDATE tiene estas cláusulas principales:

·    SET: Contiene una lista separada por comas de las columnas que deben actualizarse y el nuevo valor de cada columna, con el formato columna = expresión. El valor suministrado por la expresión incluye elementos tales como constantes, valores seleccionados de una columna de otra tabla, o valores calculados por una expresión compleja.
·    WHERE: Especifica la condición de búsqueda que define las filas de las tablas de origen que están calificadas para proporcionar valores para las expresiones de la cláusula SET. Si no se especifica una condición, todas las filas serán actualizadas.
·    LOW_PRIORITY indica que no se ejecuta la actualización hasta que ningún cliente esté leyendo la tabla.

La consulta siguiente actualiza a 1500 el límite de crédito a aquellos clientes cuyo límite esté a 1000 y su nombre sea ‘Juan Perez’:

UPDATE clientes set limitecredito=1500 where limitecredito =1000 and nombre =’Juan Perez’;

La siguiente consulta actualiza el límite de crédito a todos los clientes y lo pone a 3000.

UPDATE clientes set limitecredito=3000;

La siguiente consulta actualiza en un 20% el límite de crédito a todos clientes cuyo límite de crédito esté actualmente entre 1000 y 4000:

UPDATE clientes set limitecredito = limitecredito + (limitecredito*20)/100 WHERE limitecredito >=1000 and limitecredito<=4000;


Autor: Antonio Lopez Atienza


Tags:
Posted in Mysql | No Comments »

Leave a Comment

 

RSS
MCC D5E