Primary key implies unique AND not null
Unique allows NULL values, but all others are unique.
An index allows fast access to values in a column, under certain conditions.
Primary keys and unique constraints are usually implemented as an index! (Because it's the fastest way to check if a new value to be inserted already exists in the column)
Some databases (probably mysql) hide the fact that an index is created to make a PK or UNIQUE work and some don't - eg. PostgreSQL.
Arguably every table should have a primary key. Go here: http://techdocs.postgresql.org and read the article 'Essential Databasing Terminology'.
Chris