The timestamp type in MySQL is documented to do exactly what you describe: it gets updated
every time one of the elements of the record gets changed.
MySQL docs say:
Automatic updating of the first TIMESTAMP column occurs under any of the following conditions:
- The column is not specified explicitly in an INSERT or LOAD DATA INFILE statement.
- The column is not specified explicitly in an UPDATE statement and some other column changes value. (Note that an UPDATE that sets a column to the value it already has will not cause the TIMESTAMP column to be updated, because if you set a column to its current value, MySQL ignores the update for efficiency.)
- You explicitly set the TIMESTAMP column to NULL.
(end quote)
If you don't want that behaviour, you should use a DATETIME type, and explicitly set it to now() every time you want it updated. (DATETIME has exactly the same format as timestamp, it just doesn't have the special propperties.)