Inhaltsverzeichnis
1. Grundkonzept
Wenn ein Triggerfehler auftritt, wird das Ergebnis der Änderung angezeigt rückgängig gemacht (Transaktionssicherheit)
Datensicherheit gewährleisten und Sicherheitsüberprüfung durchführen
2. Erstellen Sie Trigger
3、触发时机
4、触发事件
5、注意事项
需求:
三、查看触发器
四、触发触发器
五、删除触发器
六、触发器的应用
6.完善
Heim Datenbank MySQL-Tutorial So verwenden Sie Trigger in der MySQL-Datenbank

So verwenden Sie Trigger in der MySQL-Datenbank

May 28, 2023 pm 05:31 PM
mysql trigger

    1. Grundkonzept

    Ein Trigger ist eine spezielle Art einer gespeicherten Prozedur. Der Trigger wird durch das Ereignis ausgelöst und ausgeführt 🎜#Erzwingen Sie vor dem Schreiben in die Datentabelle die Überprüfung oder Konvertierung der Daten (um die Datensicherheit zu gewährleisten)

    Wenn ein Triggerfehler auftritt, wird das Ergebnis der Änderung angezeigt rückgängig gemacht (Transaktionssicherheit)

    • Einige Datenbankverwaltungssysteme können Trigger für die Datendefinitionssprache DDL verwenden, sogenannte DDL-Trigger

    • # 🎜🎜 #Sie können die Transaktionsanweisungen entsprechend bestimmten Umständen ersetzen (MySQL unterstützt nicht)

    • 2. Vor- und Nachteile von Triggern

      #🎜 🎜#2.1 , Vorteile

    • Trigger können kaskadierende Änderungen durch verwandte Tabellen in der Datenbank erreichen (wenn sich die Daten einer Tabelle ändern, können Trigger verwendet werden, um Operationen auf anderen zu implementieren Tabellen, der Benutzer weiß es nicht)

    Datensicherheit gewährleisten und Sicherheitsüberprüfung durchführen

      2.2, Nachteile #🎜 🎜#
    • Eine übermäßige Abhängigkeit von Triggern wirkt sich unweigerlich auf die Struktur der Datenbank aus und erhöht die Komplexität der Wartung
    • #🎜🎜 # Daten sind auf Programmebene nicht kontrollierbar

    2. Erstellen Sie Trigger
      1. Grundlegende Syntax
    • create trigger 触发器名字 触发时机 触发事件 on 表 for each row
      begin
      end
      Nach dem Login kopieren

      2 . Triggerobjekt

    • auf Tabelle für jede Zeile Der Trigger bindet alle Zeilen in der Tabelle, wenn eine beliebige Zeile eine bestimmte Änderung aufweist, wird der Trigger ausgelöst
    • #🎜 🎜#3. Trigger-Timing

      Die Zeilen, die jeder Tabelle entsprechen, haben unterschiedliche Zustände. Wenn der SQL-Befehl ausgeführt wird, ändern sich die Daten in der Zeile immer: Vorher und nach der Datenoperation

    vorher: Der Zustand, bevor sich die Daten ändern

    nachher: ​​Die Daten Der geänderte Zustand

    on 表 for each row 触发器绑定表中所有行,没一行发生指定改变的时候,就会触发触发器

    3、触发时机

    每张表对应的行都有不同的状态,当SQL指令发生的时候,都会令行中数据发生改变,每一行总会有两种状态:数据操作前和数据操作后

    • before: 数据发生改变前的状态

    • after: 数据已经发生改变后的状态

    4、触发事件

    mysql中触发器针对的目标是数据发生改变,对应的操作只有写操作(增删改)

    • inert 插入操作

    • update 更新操作

    • delete 删除操作

    5、注意事项

    一张表中,每一个触发时机绑定的触发事件对应的触发器类型只能有一个

    一张表表中只能有一个对应的after insert 触发器

    最多只能有6个触发器

    before insert
    after insert
    before update
    after update
    before delete
    after delete
    Nach dem Login kopieren
    需求:

    下单减库存

    有两张表,一张是商品表,一张是订单表(保留商品ID)每次订单生成,商品表中对应的库存就应该发生变化

    创建两张表:

    create table my_item(
        id int primary key auto_increment,
        name varchar(20) not null,
        count int not null default 0
    ) comment '商品表';
    
    create table my_order(
        id int primary key auto_increment,
        item_id int not null,
        count int not null default 1
    ) comment '订单表';
    
    insert my_item (name, count) values ('手机', 100),('电脑', 100), ('包包', 100);
    
    mysql> select * from my_item;
    +----+--------+-------+
    | id | name   | count |
    +----+--------+-------+
    |  1 | 手机   |   100 |
    |  2 | 电脑   |   100 |
    |  3 | 包包   |   100 |
    +----+--------+-------+
    3 rows in set (0.00 sec)
    
    mysql> select * from my_order;
    Empty set (0.02 sec)
    Nach dem Login kopieren

    创建触发器:

    如果订单表发生数据插入,对应的商品就应该减少库存

    delimiter $$
    create trigger after_insert_order_trigger after insert on my_order for each row
    begin
        -- 更新商品库存
        update my_item set count = count - 1 where id = 1;
    end
    $$
    delimiter ;
    Nach dem Login kopieren

    三、查看触发器

    -- 查看所有触发器
    show triggers\G
    *************************** 1. row ***************************
                 Trigger: after_insert_order_trigger
                   Event: INSERT
                   Table: my_order
               Statement: begin
    
        update my_item set count = count - 1 where id = 1;
    end
                  Timing: AFTER
                 Created: 2022-04-16 10:00:19.09
                sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
                 Definer: root@localhost
    character_set_client: utf8mb4
    collation_connection: utf8mb4_general_ci
      Database Collation: utf8mb4_general_ci
    1 row in set (0.00 sec)
    -- 查看创建语句
    show crate trigger 触发器名字;
    -- eg:
    show create trigger after_insert_order_trigger;
    Nach dem Login kopieren

    四、触发触发器

    让触发器执行,让触发器指定的表中,对应的时机发生对应的操作

    insert into my_order (item_id, count) values(1, 1);
    
    mysql> select * from my_order;
    +----+---------+-------+
    | id | item_id | count |
    +----+---------+-------+
    |  1 |       1 |     1 |
    +----+---------+-------+
    1 row in set (0.00 sec)
    
    mysql> select * from my_item;
    +----+--------+-------+
    | id | name   | count |
    +----+--------+-------+
    |  1 | 手机   |    99 |
    |  2 | 电脑   |   100 |
    |  3 | 包包   |   100 |
    +----+--------+-------+
    3 rows in set (0.00 sec)
    Nach dem Login kopieren

    五、删除触发器

    drop trigger 触发器名字;
    -- eg
    drop trigger after_insert_order_trigger;
    Nach dem Login kopieren

    六、触发器的应用

    记录关键字 new old

    6.完善

    商品自动扣除库存

    触发器针对的是数据表中的每条记录,每行数据再操作前后都有一个对应的状态

    触发器在执行之前就将对应的数据状态获取到了:

    • 将没有操作之前的数据状态都保存到old关键字中

    • 操作后的状态都放在new

    • 4. Triggerereignis

    Das Ziel des Triggers in MySQL ist die Änderung von Daten, und die entsprechende Operation ist nur eine Schreiboperation ( hinzufügen, löschen, ändern)

    inert Einfügungsvorgang

    update Aktualisierungsvorgang
    #🎜 🎜#

    Löschvorgang löschen
    • 5. Hinweise
    • In einer Tabelle ist jeder Auslösezeitpunkt gebunden Der Triggertyp, der dem Triggerereignis entspricht, kann nur einen haben

      Es kann nur einen entsprechenden After-Insert-Trigger in einer Tabelle geben
    Es kann nur maximal 6 Trigger geben Gerät# 🎜🎜#
    delimiter $$
    create trigger after_insert_order_trigger after insert on my_order for each row
    begin
        -- 通过new关键字获取新数据的id 和数量
        update my_item set count = count - new.count where id = new.item_id;
    end
    $$
    delimiter ;
    Nach dem Login kopieren

    Nachfrage:

    Auftrag zur BestandsreduzierungEs gibt zwei Tabellen, eine ist die Produkttabelle, eine ist die Bestelltabelle (unter Beibehaltung der Produkt-ID) sollte sich der entsprechende Bestand in der Produkttabelle ändern

    Erstellen Sie zwei Tabellen:

    #🎜🎜 #

    mysql> select * from my_order;
    +----+---------+-------+
    | id | item_id | count |
    +----+---------+-------+
    |  1 |       1 |     1 |
    +----+---------+-------+
    mysql> select * from my_item;
    +----+--------+-------+
    | id | name   | count |
    +----+--------+-------+
    |  1 | 手机   |    99 |
    |  2 | 电脑   |   100 |
    |  3 | 包包   |   100 |
    +----+--------+-------+
    insert into my_order (item_id, count) values(2, 3);
    mysql> select * from my_order;
    +----+---------+-------+
    | id | item_id | count |
    +----+---------+-------+
    |  1 |       1 |     1 |
    |  2 |       2 |     3 |
    +----+---------+-------+
    mysql> select * from my_item;
    +----+--------+-------+
    | id | name   | count |
    +----+--------+-------+
    |  1 | 手机   |    99 |
    |  2 | 电脑   |    97 |
    |  3 | 包包   |   100 |
    +----+--------+-------+
    Nach dem Login kopieren
    Trigger erstellen:

    Wenn Daten in die Bestelltabelle eingefügt werden, sollte das entsprechende Produkt im Lagerbestand reduziert werden

    -- 删除原有触发器
    drop trigger after_insert_order_trigger;
    -- 新增判断库存触发器
    delimiter $$
    create trigger after_insert_order_trigger after insert on my_order for each row
    begin
        -- 查询库存
        select count from my_item where id = new.item_id into @count;
    
        -- 判断
        if new.count > @count then
            -- 中断操作,暴力抛出异常
            insert into xxx values ('xxx');
    
        end if;
        
        -- 通过new关键字获取新数据的id 和数量
        update my_item set count = count - new.count where id = new.item_id;
    end
    $$
    delimiter ;
    Nach dem Login kopieren
    #🎜🎜 #三, sehen Sie sich den Trigger an

    mysql> insert into my_order (item_id, count) values(3, 101);
    ERROR 1146 (42S02): Table 'mydatabase2.xxx' doesn't exist
    mysql> select * from my_order;
    +----+---------+-------+
    | id | item_id | count |
    +----+---------+-------+
    |  1 |       1 |     1 |
    |  2 |       2 |     3 |
    +----+---------+-------+
    2 rows in set (0.00 sec)
    
    mysql> select * from my_item;
    +----+--------+-------+
    | id | name   | count |
    +----+--------+-------+
    |  1 | 手机   |    99 |
    |  2 | 电脑   |    97 |
    |  3 | 包包   |   100 |
    +----+--------+-------+
    3 rows in set (0.00 sec)
    Nach dem Login kopieren
    #🎜🎜# 4. Lösen Sie den Trigger aus #🎜🎜##🎜🎜# Lassen Sie den Trigger ausführen und lassen Sie die entsprechende Operation zum entsprechenden Zeitpunkt in der durch den Trigger angegebenen Tabelle auftreten #🎜🎜# rrreee#🎜🎜# 5. Trigger löschen#🎜🎜#rrreee#🎜🎜# 6. Trigger-Anwendung#🎜🎜##🎜🎜#Keyword neu alt aufzeichnen#🎜🎜##🎜🎜#6.Perfekt# 🎜🎜##🎜🎜#Artikel ziehen automatisch den Lagerbestand ab#🎜🎜##🎜🎜#Der Auslöser zielt auf jeden Datensatz in der Datentabelle ab, und jede Datenzeile hat vor und nach dem Vorgang einen entsprechenden Status#🎜🎜##🎜 🎜 ##🎜🎜#Der Trigger erhält vor der Ausführung den entsprechenden Datenstatus: #🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜🎜#Speichern Sie den Datenstatus vor jeder Operation im Schlüsselwort #🎜🎜# #🎜🎜##🎜🎜##🎜🎜# im Schlüsselwort old, der Status nach der Operation wird in new platziert #🎜🎜##🎜🎜 ##🎜 🎜##🎜🎜#Im Trigger können Sie alt und neu verwenden, um die entsprechenden Datensatzdaten in der Bindungstabelle zu erhalten #🎜🎜##🎜🎜##🎜🎜#Grundlegende Syntax: #🎜🎜##🎜🎜 ## 🎜🎜##🎜🎜#Keyword.Field name#🎜🎜##🎜🎜##🎜🎜#alt und neu sind nicht für alle Trigger verfügbar #🎜🎜##🎜🎜##🎜🎜##🎜 🎜#Einfügen ist leer vor dem Einfügen, kein altes#🎜🎜##🎜🎜##🎜🎜##🎜🎜#Löschen löscht die Daten, kein neues#🎜🎜##🎜🎜##🎜🎜##🎜🎜##🎜 🎜#Item automatischer Abzug vom Lagerbestand: #🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜# Auslöser: #🎜🎜##🎜🎜#rrreee#🎜🎜#2. Optimierung #🎜🎜## 🎜🎜##🎜 🎜#Was soll ich tun, wenn die Lagermenge nicht so groß ist wie die Produktbestellung? #🎜🎜##🎜🎜#rrreee#🎜🎜##🎜🎜#Ergebnisüberprüfung: #🎜🎜##🎜🎜#rrreee

    Das obige ist der detaillierte Inhalt vonSo verwenden Sie Trigger in der MySQL-Datenbank. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    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

    Video Face Swap

    Video Face Swap

    Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

    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)

    Wie man phpmyadmin öffnet Wie man phpmyadmin öffnet Apr 10, 2025 pm 10:51 PM

    Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

    MySQL: Eine Einführung in die beliebteste Datenbank der Welt MySQL: Eine Einführung in die beliebteste Datenbank der Welt Apr 12, 2025 am 12:18 AM

    MySQL ist ein Open Source Relational Database Management -System, das hauptsächlich zum schnellen und zuverlässigen Speicher und Abrufen von Daten verwendet wird. Sein Arbeitsprinzip umfasst Kundenanfragen, Abfragebedingungen, Ausführung von Abfragen und Rückgabergebnissen. Beispiele für die Nutzung sind das Erstellen von Tabellen, das Einsetzen und Abfragen von Daten sowie erweiterte Funktionen wie Join -Operationen. Häufige Fehler umfassen SQL -Syntax, Datentypen und Berechtigungen sowie Optimierungsvorschläge umfassen die Verwendung von Indizes, optimierte Abfragen und die Partitionierung von Tabellen.

    Mysqls Platz: Datenbanken und Programmierung Mysqls Platz: Datenbanken und Programmierung Apr 13, 2025 am 12:18 AM

    Die Position von MySQL in Datenbanken und Programmierung ist sehr wichtig. Es handelt sich um ein Open -Source -Verwaltungssystem für relationale Datenbankverwaltung, das in verschiedenen Anwendungsszenarien häufig verwendet wird. 1) MySQL bietet effiziente Datenspeicher-, Organisations- und Abruffunktionen und unterstützt Systeme für Web-, Mobil- und Unternehmensebene. 2) Es verwendet eine Client-Server-Architektur, unterstützt mehrere Speichermotoren und Indexoptimierung. 3) Zu den grundlegenden Verwendungen gehören das Erstellen von Tabellen und das Einfügen von Daten, und erweiterte Verwendungen beinhalten Multi-Table-Verknüpfungen und komplexe Abfragen. 4) Häufig gestellte Fragen wie SQL -Syntaxfehler und Leistungsprobleme können durch den Befehl erklären und langsam abfragen. 5) Die Leistungsoptimierungsmethoden umfassen die rationale Verwendung von Indizes, eine optimierte Abfrage und die Verwendung von Caches. Zu den Best Practices gehört die Verwendung von Transaktionen und vorbereiteten Staten

    Warum MySQL verwenden? Vorteile und Vorteile Warum MySQL verwenden? Vorteile und Vorteile Apr 12, 2025 am 12:17 AM

    MySQL wird für seine Leistung, Zuverlässigkeit, Benutzerfreundlichkeit und Unterstützung der Gemeinschaft ausgewählt. 1.MYSQL bietet effiziente Datenspeicher- und Abruffunktionen, die mehrere Datentypen und erweiterte Abfragevorgänge unterstützen. 2. Übernehmen Sie die Architektur der Client-Server und mehrere Speichermotoren, um die Transaktion und die Abfrageoptimierung zu unterstützen. 3. Einfach zu bedienend unterstützt eine Vielzahl von Betriebssystemen und Programmiersprachen. V.

    So stellen Sie eine Verbindung zur Datenbank von Apache her So stellen Sie eine Verbindung zur Datenbank von Apache her Apr 13, 2025 pm 01:03 PM

    Apache verbindet eine Verbindung zu einer Datenbank erfordert die folgenden Schritte: Installieren Sie den Datenbanktreiber. Konfigurieren Sie die Datei web.xml, um einen Verbindungspool zu erstellen. Erstellen Sie eine JDBC -Datenquelle und geben Sie die Verbindungseinstellungen an. Verwenden Sie die JDBC -API, um über den Java -Code auf die Datenbank zuzugreifen, einschließlich Verbindungen, Erstellen von Anweisungen, Bindungsparametern, Ausführung von Abfragen oder Aktualisierungen und Verarbeitungsergebnissen.

    So starten Sie MySQL von Docker So starten Sie MySQL von Docker Apr 15, 2025 pm 12:09 PM

    Der Prozess des Startens von MySQL in Docker besteht aus den folgenden Schritten: Ziehen Sie das MySQL -Image zum Erstellen und Starten des Containers an, setzen

    CentOS installieren MySQL CentOS installieren MySQL Apr 14, 2025 pm 08:09 PM

    Die Installation von MySQL auf CentOS umfasst die folgenden Schritte: Hinzufügen der entsprechenden MySQL Yum -Quelle. Führen Sie den Befehl mySQL-server aus, um den MySQL-Server zu installieren. Verwenden Sie den Befehl mySQL_SECURE_INSTALLATION, um Sicherheitseinstellungen vorzunehmen, z. B. das Festlegen des Stammbenutzerkennworts. Passen Sie die MySQL -Konfigurationsdatei nach Bedarf an. Tune MySQL -Parameter und optimieren Sie Datenbanken für die Leistung.

    MySQLs Rolle: Datenbanken in Webanwendungen MySQLs Rolle: Datenbanken in Webanwendungen Apr 17, 2025 am 12:23 AM

    Die Hauptaufgabe von MySQL in Webanwendungen besteht darin, Daten zu speichern und zu verwalten. 1.Mysql verarbeitet effizient Benutzerinformationen, Produktkataloge, Transaktionsunterlagen und andere Daten. 2. Durch die SQL -Abfrage können Entwickler Informationen aus der Datenbank extrahieren, um dynamische Inhalte zu generieren. 3.Mysql arbeitet basierend auf dem Client-Server-Modell, um eine akzeptable Abfragegeschwindigkeit sicherzustellen.

    See all articles