web-dev-qa-db-fra.com

Relation entre chaînage de transaction et autocommande

J'essaie de comprendre la relation entre les concepts de chaînage de transaction et autocommouver. L'autocommande est généralement exposée dans une interface programmatique côté client. Par exemple. Dans JDBC avec la méthode connexion # setautocommit .

À savoir je voudrais savoir si:

  1. ces concepts sont simplement des alias les uns des autres (et quelle est la correspondance)

ou alors

  1. ces concepts sont orthogonaux et toutes les 4 combinaisons ont du sens et donnent des résultats différents (et ce que ces résultats sont)

Il existe un certain nombre de ressources suggérant que l'affaire est 1. Les mêmes ressources semblent suggérer que unchained correspond à autocommit on. Par exemple. ce post dit que:

définir enchaîné (par défaut dans Sybase, = Définir l'autocommande sur)

Ce poste plus étend dit de la même manière:

Certaines interfaces de programmation de la base de données ont un mode d'autocommk, également appelé mode inconnu. Dans ce mode, chaque énoncé est une transaction et est commis après exécution. Si vous souhaitez utiliser des transactions dans vos applications, vous devez utiliser le mode de valse manuelle ou le mode chaîné.

Cela a été ma propre compréhension jusqu'à présent. Par exemple, chaque fois que j'essaie d'exécuter (utiliser JDBC) une procédure stockée et je rencontre le message suivant:

Java.sql.sqxception: la procédure stockée "tout ce qui est" peut être exécutée uniquement en mode transaction non bloqué.

... puis réglage dans mon code:

conn.setAutoCommit(true);

... corrige le problème qui semble confirmer que inconnu est identique à autocommouver.

Cependant, regarder la Sybase ASE Documentation on lit:

Le mode par défaut, appelé mode non cogné ou mode transact-sql, nécessite des instructions explicites sur les transactions jumelées avec des relevés de transaction de validation ou de transfert de transfert pour compléter la transaction.

Cela semble être l'opposé exact de Autocommouver - Sauf si le texte ci-dessus n'est compris comme ayant la signification suivante:

Le mode par défaut, appelé mode non camarlé ou en mode transact-sql, nécessite des instructions de transaction explicites de début jumelées avec commit des instructions de transaction ou de transaction de retour pour compléter la transaction lorsque l'on veut placer plus d'une seule déclaration dans une transaction .

Enfin, j'ai rencontré ce post qui suggère que enchaînant et autocommouver sont principalement orthogonaux.

3

Autocommit vrai est identique à enchaîné

Autocommouver False est identique à enchaîné sur

En mode chaîné, votre première instruction commencera une transaction implicite, qui restera active jusqu'à ce que vous vous engagiez manuellement ou de retourner.

Même si le manuel indique que le mode par défaut est inclus, cela n'est pas vrai pour les bibliothèques clientes. Le JDBC et Python Les pilotes utilisent un mode de chaîne par défaut sauf si vous écrasez cela.

0
Sven Klemm