A many-to-many relationship needs a third table in the middle, a junction table. Each row in it is one link: "this post has this tag". It holds two foreign keys, one to each side.
A junction table usually doesn't need its own id. The pair of foreign keys is the identity of the row, so you make the pair the primary key: PRIMARY KEY (column_a, column_b), written as its own line after the columns. This is a composite primary key, and it also stops the same link being stored twice.
A junction table can carry extra facts about the link, such as when it was made.
A table can reference itself. A follow is a link between two users, so both foreign keys point at users.
UNIQUE after a column's type means no two rows can share that value.