Sea el caso en que tenemos un formulario para administrar los datos de usuarios por ejemplo y entre otros un botón “Guardar” con un evento que detecta cuando el usuario lo pulsa, regularmente este botón contendrá una sentencia “INSERT INTO….” y existirá otro botón llamado “Modificar” con el fin de actualizar los datos cuando sea necesario que contiene una sentencia “UPDATE…”.
Muy bien, en la siguiente sentencia "Personas" viene a ser el nombre de la tabla con los campos Id, Nombre, Apellido1, Apellido2. newId, newNombre ,…, ha de ser igual al campo de texto empleado.
INSERT INTO Personas(Id,Nombre,Apellido1,Apellido2) VALUES
( 'newId', 'newNombre', 'newApellido1', 'newApellido2' ) ON DUPLICATE KEY UPDATE Id= 'newId', Nombre= 'newNombre',
Apellido1= 'newApellido1', Apellido2= 'newApellido2';
Cuando guardamos por primera ves un dato con el valor clave "9397" y un nombre "Jairo" la sentencia se ejecuta en la sección INSERT... de forma ordinaria. Cuando deseamos modificar el nombre por "Hairo" al emplear la misma sentencia el "INSERT... " nos va ha dar error de clave duplicada y ahí es donde entra la otra parte de esta que dice "ON DUPLICATE KEY ", más o menos funciona como la estructura lógica de un If Else.
A continuación muestro un ejemplo que saque de un proyecto en marcha en el cual administro clientes:
A continuación muestro un ejemplo que saque de un proyecto en marcha en el cual administro clientes:
… java.sql.Statement statement = DataBase.connection.createStatement(); statement.executeUpdate("INSERT INTO ClienteParticular(codCliente,nombre,direccion,telFijo,telMovil) VALUES ( '" + ClienteParticular.data.getCodCliente() + "', '" + ClienteParticular.data.getNombre() + "', '" + ClienteParticular.data.getDireccion() + "', '" + ClienteParticular.data.getTelFijo() + "', '" + ClienteParticular.data.getTelMovil() + "' ) " + "ON DUPLICATE KEY UPDATE " + "codCliente= '" + ClienteParticular.data.getCodCliente() + "', " + "nombre= '" + ClienteParticular.data.getNombre() + "', " + "direccion= '" + ClienteParticular.data.getDireccion() + "', " + "telFijo= '" + ClienteParticular.data.getTelFijo() + "', " + "telMovil= '" + ClienteParticular.data.getTelMovil() + "' " + ";");); statement.close(); …
Bueno recuerden que esto es aplicable para MySQL, si desean más información sobre esto pueden visitar:
http://dev.mysql.com/doc/refman/5.0/en/update.html