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