I have been fighting with this exact problem for a couple weeks. In my case, the UPDATE code works some days and fails with Error 1175 on others even though I do specifically call out the primary table index in my query where clause. It seemed so random and was extremely frustrating and confusing.
There are so many comments about disabling safe update mode but that's just not an acceptable option in my case. IMHO, data integrity is too important to disable this feature, we are all human and we all make mistakes.
So after a lot of research I realized that the MySQL query optimizer was making choices about which index to use and when it decided to use an index other than the primary it will throw this error message. Some reading linked at the bottom.
For my implementation the solution was to simply add an optimizer hint to the Update statement:
Update salesFact FORCE INDEX(PRIMARY)
...
Was actually this simple in my case! In my case I had to use Force Index instead of Use Index. Performance does not seem to be negatively affected either. I hope this helps others as it's taken a couple weeks of my life away! ;)
Read about safe-update mode: https://dev.mysql.com/doc/refman/5.7/en/mysql-tips.html
Read about optimizer hints: https://dev.mysql.com/doc/refman/5.7/en/index-hints.html