There's nothing in my method that won't work on MySQL as is, even back quite a few versions.
And no, I'm not having a pissing match here either. :-)
The difference is I take a data centric view, and most developers take a user-centric view.
My view is that 'tis better for heaven and hell to open up and rain down upon the user than to put bad data into the data store. If we can give the users steel umbrellas then that's a good thing.
The user centric view point is that the user should feel as though they are walking through a field of daisies, playing with kittens, and enjoying a nice mint julip, and if we can keep duplicates out of the database, that would be kinda nice too.
The primary key is definitely a possible cause of problems for the users (i.e. speed, ugly and cryptical error messages) but perfect for the data.
The only real issue is if you have more columns than your index type can handle, but since almost every database in the universe supports at least 16 keys in a unique index, it can be considered to be universally available.
The closer the check happens to the data itself, the better, and the database is as close as it gets.