update - mysql inserta en CAMPO duplicado en vez de KEY
update mysql php (3)
------------------------------------- | user_id | user_name | user_visits | ------------------------------------- | 1 | foo | 5 | ------------------------------------- | 2 | bar | 12 | -------------------------------------
user_id: autoincreament, user_visits: predeterminado 1
INSERT INTO table (user_name) VALUES (''baz''), (''bar''), (''qux'');
la declaración anterior, por supuesto, insertará 3 nuevos registros, como resultado:
------------------------------------- | user_id | user_name | user_visits | ------------------------------------- | 1 | foo | 5 | ------------------------------------- | 2 | bar | 12 | ------------------------------------- | 3 | baz | 1 | ------------------------------------- | 4 | bar | 1 | ------------------------------------- | 5 | qux | 1 | -------------------------------------
pero lo que estoy tratando de lograr es:
------------------------------------- | user_id | user_name | user_visits | ------------------------------------- | 1 | foo | 5 | ------------------------------------- | 2 | bar | 13 | ------------------------------------- | 3 | baz | 1 | ------------------------------------- | 4 | qux | 1 | -------------------------------------
tan literalmente
si el campo nombre_usuario existe, actualice las visitas_usuarios, de lo contrario inserte un nuevo registro.
¿Es posible lograr esto con una única declaración de inserción?
Claro que sí, pero no tiene nada que ver con su declaración de insert
. Debe agregar un índice único en la columna user_name
:
create unique index user_name_idx on yourtable (user_name);
Luego, después en su código que rastrea el recuento tendrá que decidir si desea hacer una inserción o una actualización.
Puede dejar su declaración INSERT tal como está e implementar un activador que maneje sus acciones especiales.
Debe crear una clave para su campo de nombre de usuario y luego usar la consulta INSERT ON DUPLICATE
para actualizar los valores de las columnas.
Por ejemplo, su consulta debe ser,
INSERT INTO table (user_name) VALUES (''baz''), (''bar''), (''qux'')
ON DUPLICATE KEY UPDATE user_visits=user_visits+1;
Para obtener más información, visite http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html