--- title: IDBDatabase.transaction() slug: Web/API/IDBDatabase/transaction translation_of: Web/API/IDBDatabase/transaction ---
{{ APIRef("IndexedDB") }}
La méthode transaction
de l'interface {{domxref("IDBDatabase")}} renvoie une {{domxref("IDBTransaction","transaction")}} sur laquelle on peut appeler la méthode {{domxref("IDBTransaction.objectStore")}} pour accéder aux magasins d'objets de la base de donnée.
{{AvailableInWorkers}}
var transaction = db.transaction(storeNames, mode);
var transaction = db.transaction(['my-store-name']); var transaction = db.transaction('my-store-name');Pour utiliser tous les magasins d'objets de la base de donnée, on peut appeler la methode {{domxref("IDBDatabase.objectStoreNames")}}:
var transaction = db.transaction(db.objectStoreNames);Passer un tableau vide lèvera une exception.
Le {{domxref("IDBTransactionMode","mode")}} d’{{domxref("IDBObjectStore","accès aux magasins d'objets")}} à la base de données (par default readonly
):
Valeur | Explication |
---|---|
readonly |
permet de prendre des objets dans les magasins d'objets, de lire les index et de faire des curseurs. |
readwrite |
Permet en plus de que l'on peut faire en readonly, d’ajouter et mettre à jour des objets dans les magasins d'objets. |
versionchange |
Permet toute les opérations, y compris celles qui suppriment ou ajoutent des {{domxref("IDBOjectStore","magasins d'objets")}} ou des {{domxref("IDBIndex","index")}}. Ce mode met à jour le numéro de version de la base de données, il se sert au début de {{domxref ("IDBDatabase.setVersion")}}. Les {{domxref("IDBTransaction","transactions")}} dans ce mode ne peuvent pas fonctionner en même temps que d'autres. |
readwriteflush |
Si vous devez vous assurer de l'efficacité d'une transaction pour une raison quelconque (par exemple, vous stockez des données critiques qui ne peuvent être recalculées plus tard), vous pouvez forcer l’enregistrement complet sur disque avant de déclencher l’événement Depuis Firefox 40, les transactions IndexedDB diminuent en efficacité pour gagner en efficience (voir {{Bug ( "1112702")}}.) Auparavant, dans une transaction en |
readwrite
que si vous avez effectivement besoin d’écrire ou de mettre à jour des données sur la base.")}} Si on a besoin d’accéder à un magasin d'objets pour écrire ou mettre à jour des enregistrement, on utilise la sytaxe:
var transaction = db.transaction('monMagasin','readwrite');
Une {{domxref("IDBTransaction","transaction")}}.
InvalidStateError
close()
a été appelée sur cette connexion à la base de donnée.NotFoundError
storeNames
n'existe pas ou plus.TypeError
mode
n'est pas valide.InvalidAccessError
storeNames
est videDans cet exemple, on ouvre simplement une connexion à la base de donnée puis une transaction sur cette connexion.
var db; // Connexion à la base de donnée var DBOpenRequest = window.indexedDB.open("toDoList", 4); DBOpenRequest.onsuccess = function(event) { note.innerHTML += '<li>Base de donnée initialisée.</li>'; // affecte la connexion à la variable db db = DBOpenRequest.result; // exécute la fonction displayData() qui affiche la liste des taches présentes dans la base de donnée displayData(); }; // ouvre une transaction en lecture/écriture prête pour l'ajout d'enregistrement. var transaction = db.transaction(["toDoList"], "readwrite"); // affiche le succès de l'ouverture de la transaction transaction.oncomplete = function(event) { note.innerHTML += '<li>Fin de transaction: les modifications sur la base de donnée sont terminées.</li>'; }; transaction.onerror = function(event) { note.innerHTML += '<li>La transaction n'a pas pu être initiée.</li>'; }; // On peut maintenant accéder au magasin d'objet var objectStore = transaction.objectStore("toDoList"); // etc.
Pour un exemple de travail complet, voir notre To-do Notifications app (view example live).
Spécification | Statut | Commentaire |
---|---|---|
{{SpecName('IndexedDB', '#widl-IDBDatabase-transaction-IDBTransaction-DOMString-sequence-DOMString--storeNames-IDBTransactionMode-mode', 'transaction()')}} | {{Spec2('IndexedDB')}} |
Fonctionnalité | Chrome | Firefox (Gecko) | Internet Explorer | Opera | Safari (WebKit) |
---|---|---|---|---|---|
Support basique | 23{{property_prefix("webkit")}} 24 |
10 {{property_prefix("moz")}} {{CompatGeckoDesktop("16.0")}} |
10, en partie | 15 | 7.1 |
Disponible dans workers | {{CompatVersionUnknown}} | {{CompatGeckoMobile("37.0")}} | {{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatUnknown}} |
Fonctionnalité | Android | Firefox Mobile (Gecko) | Firefox OS | IE Phone | Opera Mobile | Safari Mobile |
---|---|---|---|---|---|---|
Support basique | 4.4 | {{CompatGeckoMobile("22.0")}} | 1.0.1 | 10 | 22 | 8 |
Disponible dans workers | {{CompatVersionUnknown}} | {{CompatGeckoMobile("37.0")}} | {{CompatVersionUnknown}} | {{CompatUnknown}} | {{CompatVersionUnknown}} | {{CompatUnknown}} |