In RDBMSes, a surrogate key is a key for database row that is unique for each row and is not derived from the row data. Surrogates should also be same for same data "forever" - if a row gets removed, and is added again later, it should get the same surrogate key (this should be derived from key values).

Surrogates are used internally by RDBMS to associate data with identifiers; usually these are not even seen by the users of the database.