Lección 18 - INSERT, UPDATE, DELETE SQL

Curso SQL para principiantes


En esta lección vamos a ver como modificar la BD. Los registros de una tabla pueden ser modificados de tres modos: Crear nuevos registros, modificarlos o bien eliminarlos. No se va a profundizar en este sentido, esto lo dejaremos para un posible curso avanzado de SQL.
Por razones obvias no podrá usar el banco de pruebas para probar estas instrucciones, de modo que para ello deberá usar su propia BD.

Insert SQL

La instrucción INSERT permite crear o insertar nuevos registros en una tabla, veamos su sintaxis con un ejemplo práctico, la inserción de un registro en la tabla ALUMNOS:

Código: Seleccionar todo

insert into ALUMNOS 
(ID_ALUMNO , NOMBRE , APELLIDOS , F_NACIMIENTO) 
values 
(, 'Pablo' , 'Hernandaz Mata' , '1995-03-14')
  


Observe como todo lo que se explicó en referencia a los tipos de datos es valido para la instrucción INSERT. Los datos de tipo numérico no se entrecomillan, a diferencia de los datos de tipo cadena y fecha.


En general la sintaxis de la instrucción INSERT es la siguiente:
Código: Seleccionar todo

INSERT INTO nombre_tabla 
(lista de campos separados por comas) 
VALUES 
(lista de datos separados por comas)
  


Donde cada dato de la lista VALUES se corresponde y se asigna a cada campo de la tabla en el mismo orden de aparición de la sentencia INSERT. Cabe mencionar que si la clave primaria que identifica el registro que se pretende insertar ya la usa un registro existente el SGBD rechazaría la operación y devolvería un error de clave primaria duplicada.

Así que cuando usted rellena un formulario en Internet por ejemplo, y los datos son almacenados en una BD, en algún momento del proceso se realizará una instrucción INSERT con los datos que usted a cumplimentado.

* * *

Update SQL

La instrucción UPDATE permite actualizar registros de una tabla. Debemos por lo tanto indicar que registros se quiere actualizar mediante la cláusula WHERE, y que campos mediante la cláusula SET, además se deberá indicar que nuevo dato va a guardar cada campo.
Así por ejemplo supongamos que para el curso que carecía de profesor finalmente ya se ha decidido quien lo va a impartir, la sintaxis que permite actualizar el profesor que va a impartir un curso sería la siguiente:

Código: Seleccionar todo
update CURSOS
   set ID_PROFE 
= 2
 where ID_CURSO 
= 5


Todo lo expuesto sobre lógica booleana es valido para la clausula WHERE de la instrucción UPDATE, en todo caso dicha cláusula se comporta igual que en una consulta, solo que ahora en lugar de seleccionar registros para mostrarnos algunos o todos los campos, seleccionará registros para modificar algunos o todos sus campos. Por lo tanto omitir la cláusula WHERE en una instrucción UPDATE implica aplicar la actualización a todos los registros de la tabla.


La instrucción anterior asignará un 2 en el campo ID_PROFE de la tabla CURSOS en los registros cuyo valor en el campo ID_CURSO sea 5. Como sabemos que el campo ID_CURSO es la clave primaria de la tabla, tan solo se modificará un solo registro si es que existe. Obviamente en este caso, dado que el campo que se pretende actualizar es clave foránea de la tabla PROFESORES, si no existe un registro en dicha tabla con identificador 2 el SGBD devolverá un error de clave no encontrada.

Veamos otro ejemplo, esta vez se modificarán varios campos y registros con una sola instrucción. Recordemos la tabla EMPLEADOS, en ella se guardan los datos de cada empleado, el sueldo y supongamos que también se guarda en el campo PRECIO_HORA el precio de la hora extra que cobra cada empleado en el caso que las trabaje. Bien, con el cambio de ejercicio se deben subir los sueldos y el precio por hora extra trabajada, digamos que un 2% el sueldo y un 1 % el precio de la hora extra. Sin embargo la política de empresa congela el salario a directivos que cobran 3000 euros o más. ¿Qué instrucción actualizaría estos importes según estas premisas? :
Código: Seleccionar todo
update EMPLEADOS
   set SALARIO 
= SALARIO * 1.02
       PRECIO_HORA 
= PRECIO_HORA * 1.01 
 where SALARIO 
< 3000 


Por lo tanto solo se está actualizando el salario y el precio de la hora extra de aquellos empleados que su salario es inferior a 3000 euros.

En general la sintaxis de la instrucción UPDATE es la siguiente:
Código: Seleccionar todo

UPDATE nombre_tabla 
   SET campo1 
= valor1,
       campo2 = valor2,
       ...
       campoN = valorM
WHERE condicines


* * *

Delete SQL

La isntrucción DELETE permite eliminar regsitros de una tabla, su sintaxis es simple, puesto que solo debemos indicar que registros deseamos eliminar mediante la cláusula WHERE. La siguiente consulta elimina todos los registros de la tabla mascotas que estan de baja:

Código: Seleccionar todo
delete from MACOTAS
 where ESTADO 
= 'B'
  


Al igua que la instrucción que ocurria con la UPDATE, para la instrucción DELETE es válido todo lo expuesto sobe la cláusula WHERE para consultas.


La siguiente instrucción elimina todos los registros de la tabla VEHICULOS:

Código: Seleccionar todo
delete 
  from VEHICULOS


Al eliminar registros de una tabla estos no deben figurar como clave foránea en otra tabla, de lo contrario el SGBD devolverá un error de violación de integridad referencial, puesto que si se permitiese quedarían regsitros huerfanos.

En general la sintaxis de la instrucción DELETE es la siguiente:
Código: Seleccionar todo
DELETE
  FROM nombre_tabla
 WHERE condiniones


* * *

Resumen

Con las instrucciones INSERT, DELETE y UPDATE el SGBD permite crear eliminar o modificar registros.

La cláusula WHERE de las instrucciones DELETE y UPDATE se comporta igual que en las consultas y permite descartar o considerar registros mediante condiciones por la instrucción de actualización o de borrado. Omitir la cláusula WHERE implica aplicar la operación a todos los registros de la tabla.

Al insertar eliminar o actualizar datos, deben respetarse las restricciones. Si estas están montadas en la BD, cosa por otro lado muy recomendable, podemos tener errores de tres tipos:
  • Clave primaria duplicada (Al insertar o modificar un registro).
  • Violación de integridad referencial (se pretende dejar huérfanos registros que apuntan al registro padre al intentarlo eliminar o modificar).
  • Clave padre no encontrada (al actualizar o insertar una clave foránea que no existe en la tabla padre a la que apunta)

* * *

Ejercicio 1
Construya una instrucción de inserción en la tabla CURSOS para guardar un nuevo curso de pintura y asígnele una clave que no entre en conflicto con la existentes, posteriormente construya la instrucción para eliminar de la tabla el registro que acaba de crear.

Ejercicio 2
En esta lección se puso como ejemplo la actualización del salario de los empleados donde este se incrementaba un 2% para empleados con un sueldo inferior a 3000 euros. Sin embargo no parece muy justo que un empleado con un sueldo de 3000 Euros no reciba incremento alguno, y otros que rozan los 3000 euros pero no llegan reciban el incremento superando el importe de corte una vez aplicado dicho incremento. Construya una instrucción de actualización, que se debería ejecutar previamente, de modo que evite que para estos empleados el resultado del incremento sea superior a 3000 euros. Para ello esta instrucción debe actualizar el salario de los empleados afectados a 3000 euros, para que cuando se realice el incremento no se les aplique la subida puesto que su sueldo será entones de 3000 euros justos.




    Lección 17 - Funciones
  • Lección 19 - Síntesis de la segunda parte

Creative Commons License Creative Commons License

Este curso está sujeto a la licencia Reconocimiento-NoComercial-SinObraDerivada 3.0 de Creative Commons. Usted puede copiarla, distribuirla y comunicarla públicamente siempre que especifique su autor y deletesql.com; no la utilice para fines comerciales; y no haga con ella obra derivada. Puede usted consultar la licencia completa aquí.




Volver a Curso SQL desde cero

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 12 invitados