Maison base de données tutoriel mysql 事务嵌套的那些事儿

事务嵌套的那些事儿

Jun 07, 2016 pm 05:43 PM
事务 嵌套

关于事务嵌套,以前了解一些,但总是属于模棱两可,平时处理这种问题时候也是依照前人的经验,但至于为什么这么做,还真是知其然不知其所以然。(博客园的代码展开为什么不能展开呢?还请各位大侠指点!) 今天一个同事问我关于事务的问题,我就用代码给他举

  关于事务嵌套,以前了解一些,但总是属于模棱两可,平时处理这种问题时候也是依照前人的经验,但至于为什么这么做,网站空间,还真是“知其然不知其所以然”。(博客园的代码展开为什么不能展开呢?还请各位大侠指点!)

  今天一个同事问我关于事务的问题,我就用代码给他举例测试,在测试的过程中我遇到了一点小问题,但在继续测试的时候,我解决了这个问题,也让我对事务的嵌套有了更加深刻的认识。

  废话不再多说了,开始正题。

  本文的目的是跟大家讨论一下关于嵌套事务的相关问题,美国服务器,所以有关事务的基础知识和概念,本文假设读者已经了解。

  嵌套事务一般的使用场景是一些公用的,虚拟主机,最小单元的业务逻辑,这些业务逻辑很多情况下都是被另外一些更加复杂,更加完整的业务逻辑调用。

  为了更加贴近实际,本文的例子尽量接近真实业务,在此我们拿一个电子商务网站的订单支付来进行举例,具体例子如下

  提交订单之后,支付订单(扣除账户余额)并更新订单的状态。

  根据业务,我们创建三个表

  会员表

  账户变动记录表

  订单表

  建表语句如下: 

CREATE TABLE T_Users( Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,--自增编号 UserName NVARCHAR(50) NOT NULL,--用户名,保持唯一 UserMoney DECIMAL(9,2) NOT NULL DEFAULT 0--用户账户余额,不能小于 ) CREATE TABLE T_MoneyLog( Id INT IDENTITY(1,1) PRIMARY KEY NOT NULL,--自增编号 UserName NVARCHAR(50) NOT NULL, --用户名 ChangeType INT NOT NULL,--账户变动类型(1支付订单,发送短信,提交参会申请) MoneyBefore DECIMAL(9,2) NOT NULL DEFAULT 0, --会员账户变动前余额 ChangeMoney DECIMAL(9,2) NOT NULL DEFAULT 0, --变动的金额 MoneyAfter DECIMAL(9,2) NOT NULL DEFAULT 0, --会员账户变动后余额 Remark NVARCHAR(100), --账户变动备注 AddTime DATETIME NOT NULL DEFAULT GETDATE() --变动时间 ) CREATE TABLE T_Order( Id INT IDENTITY(1,1) NOT NULL, --自增编号 OrderId VARCHAR(20) NOT NULL PRIMARY KEY,--订单号 SumMoney DECIMAL(9,2) NOT NULL DEFAULT 0,--订单总共需要支付费用 OrderStatus INT NOT NULL DEFAULT 0,--订单状态(未支付,已支付) AddTime DATETIME NOT NULL DEFAULT GETDATE(),--订单提交时间 PayTime DATETIME NULL--订单支付时间 )

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Les fonctions génériques de Go peuvent-elles être imbriquées les unes dans les autres ? Les fonctions génériques de Go peuvent-elles être imbriquées les unes dans les autres ? Apr 16, 2024 pm 12:09 PM

Fonctions génériques imbriquées Les fonctions génériques de Go 1.18 permettent la création de fonctions qui s'appliquent à plusieurs types, et les fonctions génériques imbriquées peuvent créer des hiérarchies de code réutilisables : les fonctions génériques peuvent être imbriquées les unes dans les autres, créant ainsi une structure de réutilisation de code imbriquée. En composant des filtres et des fonctions de mappage dans un pipeline, vous pouvez créer des pipelines réutilisables de type sécurisé. Les fonctions génériques imbriquées fournissent un outil puissant pour créer du code réutilisable et de type sécurisé, rendant votre code plus efficace et plus maintenable.

Délai d'attente du verrouillage dépassé ; essayez de redémarrer la transaction - Comment résoudre l'erreur MySQL : délai d'attente de la transaction Délai d'attente du verrouillage dépassé ; essayez de redémarrer la transaction - Comment résoudre l'erreur MySQL : délai d'attente de la transaction Oct 05, 2023 am 08:46 AM

Lockwaittimeoutexceeded;tryrestartingtransaction - Comment résoudre l'erreur MySQL : délai d'attente de transaction Lorsque vous utilisez la base de données MySQL, vous pouvez parfois rencontrer une erreur courante : Lockwaittimeoutexceeded;tryrestartingtransaction. Cette erreur indique que le délai d'attente de transaction a expiré. Cette erreur se produit généralement lorsque

Traitement des transactions MySQL : la différence entre la soumission automatique et la soumission manuelle Traitement des transactions MySQL : la différence entre la soumission automatique et la soumission manuelle Mar 16, 2024 am 11:33 AM

Traitement des transactions MySQL : la différence entre la soumission automatique et la soumission manuelle Dans la base de données MySQL, une transaction est un ensemble d'instructions SQL soit toutes les exécutions réussissent, soit toutes les exécutions échouent, garantissant la cohérence et l'intégrité des données. Dans MySQL, les transactions peuvent être divisées en soumission automatique et soumission manuelle. La différence réside dans le moment de la soumission de la transaction et dans l'étendue du contrôle sur la transaction. Ce qui suit présentera en détail la différence entre la soumission automatique et la soumission manuelle, et donnera des exemples de code spécifiques à illustrer. 1. Soumettre automatiquement dans MySQL, s'il n'est pas affiché

Comment utiliser le traitement des formulaires Vue pour implémenter l'imbrication récursive des formulaires Comment utiliser le traitement des formulaires Vue pour implémenter l'imbrication récursive des formulaires Aug 11, 2023 pm 04:57 PM

Comment utiliser le traitement de formulaire Vue pour implémenter l'imbrication récursive de formulaires Introduction : Alors que la complexité du traitement des données frontales et du traitement des formulaires continue d'augmenter, nous avons besoin d'un moyen flexible de gérer les formulaires complexes. En tant que framework JavaScript populaire, Vue nous fournit de nombreux outils et fonctionnalités puissants pour gérer l'imbrication récursive des formulaires. Cet article expliquera comment utiliser Vue pour gérer des formulaires aussi complexes et joindra des exemples de code. 1. Imbrication récursive de formulaires Dans certains scénarios, nous pouvons avoir besoin de gérer une imbrication récursive.

Comment implémenter la gestion des exceptions imbriquées en C++ ? Comment implémenter la gestion des exceptions imbriquées en C++ ? Jun 05, 2024 pm 09:15 PM

La gestion des exceptions imbriquées est implémentée en C++ via des blocs try-catch imbriqués, permettant de déclencher de nouvelles exceptions dans le gestionnaire d'exceptions. Les étapes try-catch imbriquées sont les suivantes : 1. Le bloc try-catch externe gère toutes les exceptions, y compris celles levées par le gestionnaire d'exceptions interne. 2. Le bloc try-catch interne gère des types spécifiques d'exceptions, et si une exception hors de portée se produit, le contrôle est confié au gestionnaire d'exceptions externe.

Comment créer des tableaux imbriqués en HTML ? Comment créer des tableaux imbriqués en HTML ? Sep 09, 2023 pm 10:05 PM

Les tableaux constituent un aspect fondamental et crucial du développement Web et sont utilisés pour présenter les informations dans un format ordonné et clair. Cependant, il peut y avoir des situations dans lesquelles des données plus complexes doivent être présentées, nécessitant l'utilisation de tableaux imbriqués. Les tableaux imbriqués sont des tableaux situés dans d’autres cellules du tableau. Dans cet article, nous vous guiderons tout au long du processus de création de tableaux imbriqués en HTML, avec des explications méticuleusement détaillées et des illustrations pour vous aider à comprendre les concepts plus efficacement. Que vous soyez un débutant ou un concepteur de sites Web expérimenté, cet article vous fournira les connaissances et l'expertise dont vous avez besoin pour maîtriser la création de tableaux imbriqués à l'aide de HTML. Avant de commencer à explorer la création de tableaux imbriqués, il est nécessaire de comprendre la composition de base des tableaux HTML. Les tableaux HTML sont implémentés via l'élément <table>

Maîtrisez la puissance de PHP PDO : requêtes avancées et mises à jour Maîtrisez la puissance de PHP PDO : requêtes avancées et mises à jour Feb 20, 2024 am 08:24 AM

L'extension PHP Data Objects (PDO) fournit une interaction efficace et orientée objet avec les serveurs de bases de données. Ses capacités avancées de requête et de mise à jour permettent aux développeurs d'effectuer des opérations de base de données complexes, améliorant ainsi les performances et la maintenabilité du code. Cet article approfondira les fonctions avancées de requête et de mise à jour de PDO et vous guidera pour maîtriser ses puissantes fonctions. Requêtes avancées : utilisation d'espaces réservés et de paramètres liés Les espaces réservés et les paramètres liés sont des outils importants pour améliorer les performances et la sécurité des requêtes. Les espaces réservés utilisent des points d'interrogation (?) pour représenter les paramètres remplaçables dans la requête, tandis que les paramètres de liaison vous permettent de spécifier le type de données et la valeur de chaque paramètre. En utilisant ces méthodes, vous pouvez éviter les attaques par injection SQL et améliorer les performances car le moteur de base de données peut optimiser les requêtes à l'avance. //Utiliser l'espace réservé $stmt=$

Tutoriel PHP PDO : Un guide avancé des bases à la maîtrise Tutoriel PHP PDO : Un guide avancé des bases à la maîtrise Feb 19, 2024 pm 06:30 PM

1. Introduction à PDO PDO est une bibliothèque d'extension de PHP, qui fournit une manière orientée objet d'exploiter la base de données. PDO prend en charge une variété de bases de données, notamment Mysql, postgresql, Oracle, SQLServer, etc. PDO permet aux développeurs d'utiliser une API unifiée pour exploiter différentes bases de données, ce qui permet aux développeurs de basculer facilement entre différentes bases de données. 2. PDO se connecte à la base de données Pour utiliser PDO pour vous connecter à la base de données, vous devez d'abord créer un objet PDO. Le constructeur de l'objet PDO reçoit trois paramètres : type de base de données, nom d'hôte, nom d'utilisateur de la base de données et mot de passe. Par exemple, le code suivant crée un objet qui se connecte à une base de données MySQL : $dsn="mysq

See all articles