Heim Datenbank MySQL-Tutorial 对触发器的思考

对触发器的思考

Jun 07, 2016 pm 04:06 PM
um 博客 思考 auslösen 触发器

读到周洲同学的博客,看到一篇关于触发器的文章,是在用户充值时,需要在t_reCharge表中插入一条记录,同时更新t_card表以保证数据一致性.我们当时没想特别多,没想到触发器,就是写了多条sql语句,为了不出错后来使用了事务或存储过程,没记错的话是放在存储过程里

读到周洲同学的博客,看到一篇关于触发器的文章,是在用户充值时,需要在t_reCharge表中插入一条记录,同时更新t_card表以保证数据一致性.我们当时没想特别多,没想到触发器,就是写了多条sql语句,为了不出错后来使用了事务或存储过程,没记错的话是放在存储过程里了。她是这么实现的:

"recharge表中保证提取的是最新一条充值记录,card表中保证更新的记录满足卡号等于充值卡号。"

<spanstyle="font-family:FangSong_GB2312;">CREATETRIGGER[dbo].[CardCash]
  on [dbo].[T_Recharge]
  for Insert
 AS
  BEGIN
  UPDATE T_Card set sCash  =sCash +(select top 1 rAdd  fromT_Recharge order by rNo desc) WhereT_Card .cNo in (select top 1 cNo  fromT_Recharge order by rNo desc )  
  END</span>
Nach dem Login kopieren

原文链接如下:

给D层减负-存储过程与触发器的使用

看到这儿,心里挺佩服小师妹的,不过我还有两个问题:

1. sql语句是硬伤,我可不可以传参呢?

2. 如果有两个卡同时充值,会不会查询到的t_reCharge最新记录是另一个卡的?换句话说,update和insert孰先孰后?其实我一直也没想明白两个卡同时充值到底先插入哪条记录?

3. 如果2中的触发器本身就是事务,保证了要么都执行要么都不执行,就没有这个问题.否则,是不是考虑加上事务呢?

接下来进一步了解了触发器的工作原理。

由于使表中数据发生变化的操作有插入、更新和删除,所以触发器可以分为三类:INSERT触发器、UPDATE触发器和DELETE触发器。

1.INSERT触发器

当试图向表中插入记录时,INSERT触发器(如果有)自动执行,此时系统自动创建一个inserted表,新的记录被添加到触发器表和inserted表。触发器可以检查inserted表,确定是否执行触发器动作和如何执行触发器动作。

2.DELETE触发器

当试图从表中删除信息时,DELETE触发器被触发,此时系统自动创建一个deleted表,被删除的行被放置到这个特殊的表中。被删除的行在触发器表中将不再存在。因此,触发器表和deleted表之间没有共同的记录。

3.UPDATE触发器

UPDATE语句可以看成两步,删除一条旧记录,插入一条新记录。所以,UPDATE触发器被触发时,自动创建一个deleted表和一个inserted表,UPDATE语句使原始行移入deleted表,将更新行插入到inserted表中。

我们这里是一个insert触发器,那为什么用触发器?用一个类似的例子来解释。我们有两个表用来记录商品的出库入库情况,t_good_store记录库存的产品类别和数量,而t_good_out记录出库的产品类别和数量,那么每当我们出库的某个类别的产品一定数量的时候,我们应该在t_good_out中插入该产品的类别和出库数量,同时也应该在t_good_store中用update来更新库存的相应类别的产品的数量;这时我们要完成两个任务:插入t_good_out后更新t_good_store,为避免只操作其中一个而造成数据的不一致,我们可以用触发器,在t_good_out的插入操作上绑定一个对t_good_store更新的触发器。当然这个过程应该是一个事务,这就不必担心插入t_good_out表执行了,而绑定在这个动作上的触发器操作不会执行,因为数据库设计了原子性。

再来看上面的三个问题.

1. 触发器只有在修改(包括插入和删除)时触发,目的是给我们一个做其他动作的机会,它没有在查询数据时做其他动作的能力.问了触发器是否有参数这个问题,说明我刚开始没有理解触发器的这个特性.

另外,根据触发器的工作原理,我们可以访问inserted和deleted这两张临时表,需要明白的是inserted存放进行insert和update操作后的数据;deleted存放进行delete和update操作前的数据.

Update=delete+insert.这一点给我们的启示:DRP系统中有一个页面是修改Item或者client或者flowCard,可以先都删除再都插入,然后提示修改成功,不然那个样子多的条目,如何一条条判断再modify?

2. 关于同时插入两个记录,有人说可以,因为insert是在毫秒级,但是不管什么级都是有先有后啊.又说,insert是rowlevel锁,如果不Lock table的话,也无法确定先后啊.

3. 我认为可以不加事务,触发器要是设计得insert和update之间还可以容得下其他操作,那就没有什么意义了.

我先实验一把,这个空当,就算抛砖引玉了,当然也会默默地、虚心地接受板砖…

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So nutzen Sie körperliche Gesten, um lustige FaceTime-Effekte auf dem Bildschirm auszulösen So nutzen Sie körperliche Gesten, um lustige FaceTime-Effekte auf dem Bildschirm auszulösen Oct 12, 2023 pm 11:49 PM

In iOS17 und iPadOS17 führte Apple nachrichtenähnliche FaceTime-Reaktionen auf iPhone und iPad ein. Anstatt Symbole aus einem Menü auszuwählen, können Sie sie während eines FaceTime-Anrufs mit physischen Gesten auslösen. Wenn Sie einen FaceTime-Videoanruf auf einem iPhone mit iOS 17 oder einem iPad mit iPadOS 17 tätigen, können Sie Bildschirmeffekte wie Herzen, Luftballons, Konfetti, Feuerwerk usw. auslösen. Die visuellen Effekte füllen die Anzeige in Ihrem FaceTime-Anrufvideo aus. Manchmal spektakulär für andere. Sie haben die Hände frei und können diese Reaktionen nur durch körperliche Gesten auslösen. Zum Beispiel ein Daumen hoch

Beginnen Sie bei Null und führen Sie Schritt für Schritt durch die Installation von Flask und die schnelle Einrichtung eines persönlichen Blogs Beginnen Sie bei Null und führen Sie Schritt für Schritt durch die Installation von Flask und die schnelle Einrichtung eines persönlichen Blogs Feb 19, 2024 pm 04:01 PM

Von Grund auf werde ich Ihnen Schritt für Schritt beibringen, wie Sie Flask installieren und schnell einen persönlichen Blog erstellen. Als Person, die gerne schreibt, ist es sehr wichtig, einen persönlichen Blog zu haben. Als leichtes Python-Web-Framework kann Flask uns dabei helfen, schnell ein einfaches und voll funktionsfähiges persönliches Blog zu erstellen. In diesem Artikel fange ich bei Null an und zeige Ihnen Schritt für Schritt, wie Sie Flask installieren und schnell einen persönlichen Blog erstellen. Schritt 1: Python und pip installieren Bevor wir beginnen, müssen wir zuerst Python und pi installieren

So verbergen Sie Text in Powerpoint, bis er angeklickt wird So verbergen Sie Text in Powerpoint, bis er angeklickt wird Apr 14, 2023 pm 04:40 PM

So blenden Sie Text vor jedem Klick in PowerPoint aus Wenn Sie möchten, dass Text angezeigt wird, wenn Sie irgendwo auf eine PowerPoint-Folie klicken, ist die Einrichtung schnell und einfach. So blenden Sie Text aus, bevor Sie in PowerPoint auf eine Schaltfläche klicken: Öffnen Sie Ihr PowerPoint-Dokument und klicken Sie auf das Menü „Einfügen“. Klicken Sie auf Neue Folie. Wählen Sie „Leer“ oder eine der anderen Voreinstellungen. Klicken Sie immer noch im Menü „Einfügen“ auf „Textfeld“. Ziehen Sie ein Textfeld auf die Folie. Klicken Sie auf das Textfeld und geben Sie Ihre ein

Möglichkeiten, Reaktionseffekte in FaceTime auf dem Mac zu inspirieren Möglichkeiten, Reaktionseffekte in FaceTime auf dem Mac zu inspirieren Oct 10, 2023 pm 06:09 PM

In macOS Sonoma hat Apple nachrichtenähnliche Reaktionen für FaceTime eingeführt. Anstatt jedoch durch Text ausgelöst zu werden, können sie auch durch Gesten ausgelöst werden. Wenn Sie einen FaceTime-Videoanruf auf einem Mac mit macOS Sonoma oder höher tätigen, können Sie Bildschirmeffekte wie Herzen, Luftballons, Konfetti, Feuerwerk und mehr auslösen, die die Anzeige im FaceTime-Anruffenster überfluten. Sie können diese Layer-Bildschirmeffekte über den grünen FaceTime-Menüleisteneintrag auslösen, der eine Mini-Webcam-Ansicht und Schaltflächen zum Auslösen von Reaktionen enthält, oder Sie können freihändig arbeiten und dieselben Reaktionen nur durch physische Gesten auslösen. Beispielsweise löst ein „Daumen hoch“ ein „Gefällt mir“ oder „Zwei“ aus

Was sind die zehn besten Open-Source-PHP-Blogsysteme im Jahr 2022? 【empfehlen】 Was sind die zehn besten Open-Source-PHP-Blogsysteme im Jahr 2022? 【empfehlen】 Jul 27, 2022 pm 05:38 PM

Blog, auch Weblog, Blog oder Blog übersetzt, ist eine Website, die in der Regel von Einzelpersonen verwaltet wird und von Zeit zu Zeit neue Artikel veröffentlicht. Wie richtet man also einen Blog ein? Was sind die PHP-Blogsysteme? Welches Blogging-System eignet sich am besten? Nachfolgend fasst die chinesische PHP-Website die zehn besten Open-Source-PHP-Blogsysteme zusammen und teilt sie mit Ihnen.

Erstellen Sie ein einfaches Blog: mit PHP und SQLite Erstellen Sie ein einfaches Blog: mit PHP und SQLite Jun 21, 2023 pm 01:23 PM

Mit der Entwicklung des Internets sind Blogs für immer mehr Menschen zu einer Plattform geworden, auf der sie ihr Leben, Wissen und Ideen teilen können. Wenn Sie auch ein eigenes Blog erstellen möchten, erfahren Sie in diesem Artikel, wie Sie mit PHP und SQLite ein einfaches Blog erstellen. Bestimmen Sie die Anforderungen Bevor wir mit der Erstellung eines Blogs beginnen, müssen wir die Funktionen bestimmen, die wir erreichen möchten. Zum Beispiel: Einen Blog-Beitrag erstellen Einen Blog-Beitrag bearbeiten Einen Blog-Beitrag löschen Eine Liste von Blog-Beiträgen anzeigen Blog-Beitragsdetails anzeigen Benutzerauthentifizierung und Berechtigungskontrolle PHP und SQLite installieren Wir müssen PHP und S installieren

Warum wird das Event-Bubbling zweimal ausgelöst? Warum wird das Event-Bubbling zweimal ausgelöst? Feb 22, 2024 am 09:06 AM

Warum wird das Event-Bubbling zweimal ausgelöst? Ereignisblasen (Event Bubbling) bedeutet, dass im DOM, wenn ein Element ein Ereignis auslöst (z. B. ein Klickereignis), das Ereignis vom Element zum übergeordneten Element übergeht, bis es zum Dokumentobjekt der obersten Ebene übergeht. Das Ereignis-Bubbling ist Teil des DOM-Ereignismodells, das es Entwicklern ermöglicht, Ereignis-Listener an übergeordnete Elemente zu binden, sodass, wenn untergeordnete Elemente Ereignisse auslösen, diese Ereignisse erfasst und über den Bubbling-Mechanismus verarbeitet werden können. Manchmal stoßen Entwickler jedoch auf Ereignisse, die zweimal auftreten und ausgelöst werden.

iOS 17: So lösen Sie Reaktionseffekte in FaceTime aus iOS 17: So lösen Sie Reaktionseffekte in FaceTime aus Sep 22, 2023 pm 01:25 PM

In iOS17 führte Apple nachrichtenähnliche Reaktionen in FaceTime ein. Anstatt jedoch durch Text ausgelöst zu werden, können sie auch durch Gesten ausgelöst werden. Wenn Sie einen FaceTime-Videoanruf auf einem iPhone mit iOS 17 tätigen, können Sie jetzt Bildschirmeffekte wie Herzen, Luftballons, Konfetti, Feuerwerk und mehr auslösen, die die Anzeige über dem FaceTime-Anruffenster überfluten. Sie können diese Ebenen-Bildschirmeffekte auslösen, indem Sie in FaceTime lange auf ein Bild drücken, wodurch ein Menü mit Reaktionsoptionen angezeigt wird, oder Sie können freihändig arbeiten und dieselben Reaktionen nur durch physische Gesten auslösen. Beispielsweise löst ein Daumen nach oben ein „Gefällt mir“ aus, und zwei Daumen nach oben sind ein Feuerwerk. Ebenso zählt ein Daumen nach unten nicht

See all articles