UNIQUE is a table-constraint keyword that guarantees no two rows share the same non-null value (or combination of values) in the constrained column list. It can be declared inline on a single column or as a separate constraint on one or multiple columns. Unlike PRIMARY KEY, a table may contain multiple UNIQUE constraints and they allow multiple NULLs in most relational databases (because NULL is considered unknown, not equal). When a DML statement attempts to insert or update data that violates a UNIQUE rule, the operation fails with an error. Vendors usually back UNIQUE constraints with a unique index, so look-ups and joins that filter on the constrained columns are often faster. Some dialects (e.g., Oracle) also accept UNIQUE in SELECT to mean DISTINCT, but this document focuses on the constraint form. Caveats: behaviour with NULLs varies subtly by dialect; adding a UNIQUE constraint on large existing tables can be slow or blocked by duplicates; dropping the constraint removes the uniqueness guarantee.
SQL-92
PRIMARY KEY combines UNIQUE and NOT NULL in one constraint and can appear only once per table. UNIQUE permits multiple NULLs and you may declare several per table.
Most databases permit any number of NULLs because NULL is not equal to NULL. SQL Server in certain modes restricts it to a single NULL.
Yes. Use ALTER TABLE table_name DROP CONSTRAINT constraint_name (or DROP INDEX in MySQL). After dropping it, the table no longer validates new rows for uniqueness.
In almost every major database it does. The engine builds a unique index to enforce the rule and speed up look-ups, but the implementation details vary.