#include <db.h> int DB->del(DB *db, DB_TXN *txnid, DBT *key, u_int32_t flags);
The DB->del()
method removes key/data pairs from the database. The
key/data pair associated with the specified key is discarded from the database. In the
presence of duplicate key values, all records associated with the
designated key will be discarded.
When called on a database that has been made into a secondary index
using the DB->associate() method, the
DB->del()
method deletes the key/data pair from the primary database
and all secondary indices.
The DB->del()
method will return DB_NOTFOUND if the specified key
is not in the database. The DB->del()
method will return DB_KEYEMPTY if the database is a
Queue or Recno database and the specified key exists, but was never explicitly created by
the application or was later deleted. Unless otherwise specified, the
DB->del()
method returns a non-zero error value on failure and 0 on success.
If the operation is part of an application-specified transaction, the txnid parameter is a transaction handle returned from DB_ENV->txn_begin(); if the operation is part of a Berkeley DB Concurrent Data Store group, the txnid parameter is a handle returned from DB_ENV->cdsgroup_begin(); otherwise NULL. If no transaction handle is specified, but the operation occurs in a transactional database, the operation will be implicitly transaction protected.
The key DBT operated on.
The flags parameter must be set to 0 or one of the following values:
If the database is of type DB_QUEUE then this flag may be set to force the head of the queue to move to the first non-deleted item in the queue. Normally this is only done if the deleted item is exactly at the head when deleted.
Delete multiple data items using keys from the buffer to which the key parameter refers.
To delete records in bulk by key with the btree or hash access methods, construct a bulk buffer in the key DBT using DB_MULTIPLE_WRITE_INIT and DB_MULTIPLE_WRITE_NEXT. To delete records in bulk by record number, construct the key DBT using DB_MULTIPLE_RECNO_WRITE_INIT and DB_MULTIPLE_RECNO_WRITE_NEXT with a data size of zero.
A successful bulk delete operation is logically equivalent to a loop through each key/data pair, performing a DB->del() for each one.
See the DBT and Bulk Operations for more information on working with bulk updates.
The DB_MULTIPLE
flag may only be used alone.
Delete multiple data items using keys and data from the buffer to which the key parameter refers.
To delete records in bulk with the btree or hash access methods, construct a bulk buffer in the key DBT using DB_MULTIPLE_WRITE_INIT and DB_MULTIPLE_KEY_WRITE_NEXT. To delete records in bulk with the recno or hash access methods, construct a bulk buffer in the key DBT using DB_MULTIPLE_RECNO_WRITE_INIT and DB_MULTIPLE_RECNO_WRITE_NEXT.
See the DBT and Bulk Operations for more information on working with bulk updates.
The DB_MULTIPLE_KEY
flag may only be used alone.
The DB->del()
method may fail and return one of the following non-zero errors:
A foreign key constraint violation has occurred. This can be caused by one of two things:
An attempt was made to add a record to a constrained database, and the key used for that record does not exist in the foreign key database.
DB_FOREIGN_ABORT was declared for a foreign key database, and then subsequently a record was deleted from the foreign key database without first removing it from the constrained secondary database.
A Berkeley DB Concurrent Data Store database environment configured for lock timeouts was unable to grant a lock in the allowed time.
When a client synchronizes with the master, it is possible for committed
transactions to be rolled back. This invalidates all the database and cursor
handles opened in the replication environment. Once this occurs, an attempt to use
such a handle will
return DB_REP_HANDLE_DEAD
.
The application will need to discard the handle and open a new one in order to
continue processing.