Is there any way you can tell MySQL to set value to 0 if value for unsigned column is < 0?
Use the GREATEST() function (this needs a CAST() as well):

UPDATE my_table 
SET comments = GREATEST(CAST(comments AS signed)-3, 0) 
WHERE something = 123;


or the IF() function:

UPDATE my_table 
SET comments = IF(comments&gt;3, comments-3, 0) 
WHERE something = 123;


or a CASE expression:

UPDATE my_table
SET comments = CASE WHEN comments&gt;3 THEN comments-3 ELSE 0 END 
WHERE something = 123;