2012-07-09 7 views
1

Si deux utilisateurs exécutaient en même temps des instructions INSERT INTO sur la même table cible, celles-ci seraient-elles exécutées en parallèle ou en séquence?Les bases de données relationnelles exécutent-elles des instructions d'insertion en parallèle ou séquentiellement?

Ce comportement va-t-il changer selon que la table cible a une clé primaire ou non?

Est-ce une règle définie pour toutes les bases de données relationnelles ou est-ce que différents fournisseurs l'implémentent de différentes manières?

Répondre

2

En général ils seront (devraient) être exécutés en parallèle, même si une clé primaire est définie.

Le comportement dépend fortement du SGBD. MySQL avec MyISAM sera par exemple bloquer tout autre accès à une table si DML est en cours d'exécution sur la table. La même chose est vraie pour SQL Server dans l'installation par défaut et l'ancienne version de DB2.

En général, si le SGBD utilise MVCC (Oracle, PostgreSQL, Firebird, MySQL/InnoDB, ...), vous pouvez attendre des inserts de fonctionner en parallèle

Une chose qui peut insertions concurrentes de bloc est si deux transactions insèrent la même valeur de clé primaire. Dans ce cas, la seconde transaction devra attendre que le premier commit (ou que le second reçoive une erreur de violation pk) ou rollback (le second réussira).

+0

Cela peut être plus compliqué que cela. Les clés primaires sont une seule instance qui peut imposer la sérialisation. Les colonnes Identity/Auto Increment, les contraintes uniques (dont la clé primaire est un exemple) et les triggers sont d'autres situations. –

+0

@GordonLinoff: Les déclencheurs ne sérialisent pas les insertions - sauf si cela est fait manuellement dans le code du déclencheur. Point intéressant sur les colonnes d'identité. Est-ce un défaut du concept identity/auto_increment ou est-ce un résultat de l'index sous-jacent (donc c'est à nouveau l'unique "problème" de l'index). J'utilise principalement Oracle et PostgreSQL et les séquences n'ont aucun problème de concurrence. –

Questions connexes