Unless your application can be guaranteed to be running one instance at a time (ie, not a web CGI), you need to care about transactions.
Example:
Instance 1: Does key XXX exist?
DB: Nope.
Instance 2: Does key XXX exist?
DB: Nope
Instance 1: Please insert new row with key XXX
DB: Done!
Instance 2: Please insert new row with key XXX
DB: <Explosion>
Check the
DBI manpage for details on transaction support. If you aren't using DBI, or your database doesn't support transactions, you should use one that does :-) Alternatively, code your database schema and application such that it doesn't need to do such a check. This may well be possible, but it's impossible to say without knowing your application.