From the docs: http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html, you only have to use a unique key field. I mean, if you transform the email field as an unique field, running:
ALTER TABLE `your_table` ADD UNIQUE INDEX `email` (`email`);
now, when you try to insert a row with the same email, using INSERT ... ON DUPLICATE KEY UPDATE
, it'll update the values of all the fields while keeps the value of the email untouched:
a | b | email
1 | 1 | existed@email.com
After running...
INSERT INTO my_table ( a, b, email ) VALUES ( 2, 2, 'existed@email.com' )
on duplicate key update a=VALUES(a), b=VALUES(b)
you'll have
a | b | email
2 | 2 | existed@email.com
Keep an eye on specify which fields you want to be updated, if you don't specify them, it won't be updated!
EDIT: Now, with a SQLFiddle to show it working: http://sqlfiddle.com/#!2/79e67/3