i had the same confuse as you do before.
after i read the answers in your post, i decide to find out from mysql doc.
after read the doc from mysql, i think what confuse us is the understading angle. we think that "tran A change one record with no commit, and tran B reads two different data before and after, which indeed a 'dirty data' and 'non-repeatable read'", what we confuse is because we learn it from the result of the two transactions' behavior.
BUT, the correct angle is: "dirty read"' is a TWO-trasanction thing,whereas "non-repeatable read" is totally a ONE-transaction thing.
What that means? for exsample, if you are a transaction, and i am a transaction after you. you read a X, and i update it to Y, then you read again.
TO US, you have read a dirty data, because i didn't commit, maybe i want to rollback. i make you read the dity data.
TO YOU youself, in your own transaction, you read two different data, it's a non repeatable data.
a little bit verbose. may it helps.
refs:
1. https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_dirty_read
2. https://dev.mysql.com/doc/refman/8.0/en/glossary.html#glos_non_repeatable_read