Maison  >  Article  >  base de données  >  Introduction détaillée aux connaissances liées aux transactions MySQL (exemple de code)

Introduction détaillée aux connaissances liées aux transactions MySQL (exemple de code)

不言
不言avant
2019-02-01 10:39:262713parcourir

Le contenu de cet article est une introduction détaillée (exemples de code) sur les connaissances liées aux transactions MySQL. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. . a aidé.

Transactions MySQL et niveaux d'isolement des transactions

Les transactions MySQL sont principalement utilisées pour traiter des données avec des opérations volumineuses et une grande complexité. Par exemple, dans le système de gestion du personnel, si vous supprimez une personne, vous supprimerez les informations de base de la personne, ainsi que les informations liées à la personne, telles que la boîte aux lettres, les articles, etc. Ces instructions d'exploitation de base de données constituent une transaction. (cours recommandé : Tutoriel MySQL)

    • Seules les bases de données ou les tables utilisant le moteur de base de données Innodb dans MySQL prennent en charge les transactions

    • Le traitement des transactions peut être utilisé pour maintenir l'intégrité de la base de données et garantir que les lots d'instructions SQL sont tous exécutés ou non.

    • Les transactions sont utilisées pour gérer l'insertion, la mise à jour, et supprimer les déclarations

  • De manière générale, les transactions doivent répondre à 4 conditions : atomicité, cohérence, isolement, durabilité

    • Atomicité : Toutes les opérations d'une transaction sont soit toutes exécutées, soit aucune n'est exécutée et ne se retrouveront pas quelque part au milieu. Si une erreur survient lors de l'exécution de la transaction, elle sera rétablie à l'état avant le début de la transaction

    • Cohérence : Avant le début de la transaction et après le la transaction se termine, l'intégrité de la base de données Sex n'est pas ruinée. Cela signifie que les données écrites doivent respecter pleinement toutes les règles prédéfinies, y compris l'exactitude et la concaténation des données, et que la base de données ultérieure peut spontanément terminer le travail programmé

    • Caractéristiques d'isolement : La base de données permet à plusieurs transactions simultanées de lire, d'écrire et de modifier ses données en même temps. L'isolation peut empêcher l'incohérence des données due à l'exécution croisée lorsque plusieurs transactions sont exécutées simultanément. L'isolation des transactions est divisée en différents niveaux, y compris la lecture non validée, la lecture validée, la lecture répétable et la sérialisable

    • Persistance : Traitement des transactions Une fois terminée, la modification des données est permanent et ne sera pas perdu même en cas de panne du système

Sous les paramètres par défaut de la ligne de commande MySQL, les transactions sont automatiquement soumises, c'est-à-dire l'opération COMMIT sera effectué immédiatement après l'exécution de l'instruction SQL. Par conséquent, pour démarrer explicitement une transaction, vous devez utiliser la commande BEGIN ou START TRANSACTION, ou exécuter la commande SET AUTOCOMMIT=0 pour désactiver l'utilisation de la soumission automatique du tableau en cours

Instruction de contrôle de transaction :

  • BEGIN ou START TRANSACTION ; Démarrer explicitement une transaction

  • COMMIT ; TRAVAIL, tous deux équivalents. COMMIT validera la transaction et rendra permanentes toutes les modifications à la base de données

  • ROLLBACK; vous pouvez également utiliser ROLLBACK WORK, qui sont équivalents. Le rollback met fin à la transaction de l'utilisateur et annule toutes les modifications non validées en cours

  • Identifiant SAVEPOINT SAVEPOINT permet la création d'une sauvegarde au sein d'un point de transaction, une transaction ; peut avoir plusieurs SAVEPOINT

  • RELese SAVEPOINT identifiant Supprimer le point de sauvegarde d'une transaction Lorsqu'il n'y a pas de point de sauvegarde spécifié, l'exécution de cette instruction lancera une exception

    .
  • ROLLBACK TO identifié ; Retourner la transaction au point marqué

  • SET TRANSACTION Utilisé pour définir l'isolement ; niveau de la transaction. Les niveaux d'isolation des transactions fournis par le moteur de stockage InnoDB incluent READ UNCOMMITTED, READ COMMITTED, REPEATABLE READ et SERIALIZABLE

Il existe deux méthodes principales pour le traitement des transactions MySQL :

  1. Utilisez BEGIN, ROLLBACK, COMMIT pour implémenter

  • BEGINDémarrer une transaction

  • ROLLBACKAnnulation de la transaction

  • COMMITConfirmation de la transaction

  • Direct SET pour changer le mode de soumission automatique de MySQL :

    • SET AUTOCOMMIT=0 désactive la soumission automatique

    • SET AUTOCOMMIT=1 active la soumission automatique

    Une des quatre caractéristiques majeures des transactions : l'isolement

    1. Il existe un certain degré d'isolement entre la transaction A et la transaction B

    2. lire non validée

    • À ce niveau d'isolement, toutes les transactions peuvent voir les résultats d'exécution d'autres transactions non validées. Ce niveau d'isolement est rarement utilisé dans les applications pratiques. La lecture de données non validées est appelée données sales

  • lire COMMIT

    • Le niveau d'isolement par défaut pour la plupart des systèmes de bases de données (mais pas MySQL). Une transaction ne peut voir que les modifications apportées par les transactions validées. Cela évite les lectures sales, mais il y a toujours des problèmes avec les lectures non répétables et les lectures fantômes

  • lecture répétable

    • Le niveau par défaut de MySQL ; garantit que plusieurs instances de la même transaction verront les mêmes lignes de données lors de la lecture simultanée des données. Les lectures sales et les lectures non répétables sont évitées, mais un autre problème surviendra : les lectures fantômes. La lecture fantôme signifie que lorsque l'utilisateur lit une certaine plage de lignes de données, une autre transaction insère une nouvelle ligne dans la plage. Lorsque l'utilisateur lit à nouveau les lignes de données de la plage, une nouvelle ligne fantôme sera trouvée. Les moteurs de stockage InnoDB et Falcon résolvent ce problème grâce au mécanisme de contrôle de concurrence multiversion (MVCC)

    • Le mécanisme MVCC est utilisé sous le niveau d'isolement de lecture répétable, et la sélection l'opération ne sera pas mise à jour. Le numéro de version est un instantané lu (version historique) ; l'insertion, la mise à jour et la suppression mettront à jour le numéro de version, qui est la lecture actuelle (version actuelle)

  • sérialisable

    • Le niveau d'isolement le plus élevé, en forçant le tri des transactions, rendant impossible leur conflit les unes avec les autres, résolvant ainsi la lecture fantôme problème. En bref, il ajoute un verrou partagé sur chaque ligne de données lue. À ce niveau, cela peut entraîner un grand nombre de délais d'attente et de conflits de verrouillage

    Définir le niveau d'isolement des transactions

    1. Définir dans le fichier my.cnf

    - READ-UNCOMMITTED
    - READ-COMMITED
    - REPEATABLE-READ
    - SERIALIZABLE
    * 例如
    [mysqlId]
    transaction-isolation = READ-COMMITTED
    1. Définir dynamiquement le niveau d'isolement via des commandes

    SET [GLOBAL|SESSION] TRANSACTION ISOLATION LEVEL <isolation-level>
    其中isolation-level可以是:
    - READ UNCOMMITTED
    - READ COMMITTED
    - REPEATABLE READ
    - SERIALIZABLE
    
    GLOBAL|SESSION表示事务隔离级别的作用范围:
    GLOBAL:表示对所有会话有效
    SESSION:表示对当前会话有效

    Concurrence des transactions problèmes

    1. Lecture sale : la transaction A lit les données mises à jour par la transaction B, puis B annule l'opération, puis les données lues par A sont des données sales

    2. Pas possible Lecture répétée : la transaction A lit les mêmes données plusieurs fois et la transaction B met à jour les données mais ne les valide pas lors des multiples lectures de la transaction A. Par conséquent, la transaction A lit les mêmes données plusieurs fois et les résultats sont incohérents

    3. Lecture fantôme : le nombre d'éléments de données lus avant et après est incohérent. En effet, lors des multiples lectures de la transaction A, la transaction B effectue des opérations d'insertion ou de suppression sur la table

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer