Heim  >  Artikel  >  Datenbank  >  Der Unterschied zwischen gespeicherten MySQL-Prozeduren und Triggern

Der Unterschied zwischen gespeicherten MySQL-Prozeduren und Triggern

(*-*)浩
(*-*)浩Original
2019-05-09 16:00:064407Durchsuche

Eine gespeicherte MySQL-Prozedur ist eine Reihe von SQL-Anweisungen zum Ausführen bestimmter Funktionen in einem großen Datenbanksystem. Trigger sind eine besondere Art von gespeicherten Prozeduren und werden hauptsächlich durch Triggern ausgeführt Ereignisse und gespeicherte Prozeduren können direkt über den Namen der gespeicherten Prozedur aufgerufen werden.

Der Unterschied zwischen gespeicherten MySQL-Prozeduren und Triggern

Gespeicherte Prozedur: Dabei handelt es sich um eine Reihe von SQL-Anweisungen, die zur Ausführung bestimmter Funktionen in großen Datenbanksystemen verwendet werden. Trigger: Trigger ist eine spezielle Art von gespeicherter Prozedur. Sie unterscheidet sich von gespeicherten Prozeduren, die hauptsächlich durch Ereignisse ausgelöst und ausgeführt werden, während gespeicherte Prozeduren direkt über den Namen der gespeicherten Prozedur aufgerufen werden können.

Gespeicherte Prozedur:
befindet sich in einem großen Datenbanksystem,
eine Reihe von SQL-Anweisungen zum Ausführen bestimmter Funktionen,
wird in der Datenbank gespeichert und danach 1. Beim erneuten Aufruf nach der ersten Kompilierung ist keine erneute Kompilierung erforderlich.
Der Benutzer führt ihn aus, indem er den Namen der gespeicherten Prozedur angibt und Parameter angibt (sofern die gespeicherte Prozedur über Parameter verfügt).
Gespeicherte Prozedur ist ein wichtiges Objekt in der Datenbank

Vorteile:
1 ermöglicht modulare Programmierung (einmal erstellen und mehrmals verwenden)
2 ermöglicht eine schnellere Ausführung
3 reduziert den Netzwerkverkehr
4 bessere Sicherheitsmechanismen

Format:

DELIMITER // 
CREATE PROCEDURE 储存名([ IN ,OUT ,INOUT ]?参数名?数据类形...) 
BEGIN 
SQL语句 
END // 
DELIMITER ;

Aufrufender Prozess:

Verwenden Sie den Namen des Aufrufprozesses ( )

, um alle Speichervorgänge anzuzeigen und den Status des Vorgangs anzuzeigen ;
Erstellte gespeicherte Prozedur anzeigen, Prozedurnamen erstellen;
Prozedur löschen, Prozedurnamen löschen

In bedeutet, dass die Parameter von außen übergeben und innerhalb des Prozesses verwendet werden.
Out bedeutet, dass die Parameter die Daten in Variablen aus dem Prozess speichern und zur Verwendung nach außen übergeben. Alle übergebenen Variablen müssen Variablen sein, die nach dem Eintritt in den Prozess selbst vorhanden sind Als erstes wird es gelöscht und auf null gesetzt
Inout-Daten können von außen an den Prozess zur internen Verwendung übergeben werden. Gleichzeitig werden die Daten nach dem internen Vorgang nach außen zurückgegeben

Trigger Trigger:

Trigger ist eine spezielle Art von gespeicherter Prozedur, die sich von gespeicherten Prozeduren unterscheidet
Trigger wird hauptsächlich durch Ereignisse ausgelöst und ausgeführt. Während gespeicherte Prozeduren ausgeführt werden können, wird der Name der gespeicherten Prozedur direkt aufgerufen.

Funktion:
1. Kann die Überprüfung oder Konvertierung von Daten vor dem Schreiben in die Datentabelle erzwingen
2. Wenn im Trigger ein Fehler auftritt, wird das Ergebnis der Änderung rückgängig gemacht

Format

DELIMITER //
Create trigger --触发器名字 触发时机 触发事件 on 表 for each 
row 
Begin 
--操作的内容 
End // 
DELIMITER ;

Trigger-Objekt: für jede Zeile Die Triggerbindung gilt im Wesentlichen für alle Zeilen in der Tabelle. Wenn sich also jede Zeile ändert, wird der Trigger ausgelöst Jede Tabelle hat unterschiedliche Zustände. Wenn der SQL-Befehl ausgeführt wird, ändern sich die Daten in der Zeile. Vor Betriebsdaten (vorher), nach Betriebsdaten (nachher)
Triggerereignisse:
Das Ziel von Triggern in MySQL sind Änderungen in Daten, und die entsprechenden Vorgänge sind nur Abfragen (Hinzufügen, Löschen, Ändern), die dies nicht tun Datenänderung generieren,
Es gibt also kein Triggerereignis in der Abfrage
Hinweis:
In einer Tabelle kann es nur einen Triggertyp geben, der dem Triggerereignis entspricht, das an jeden Triggerzeitpunkt gebunden ist;
Da kann in einer Tabelle nur einer sein. Ein After-Insert-Trigger. Daher kann die maximale Anzahl von Triggern in einer Tabelle nur sechs betragen.

Gespeicherte Prozedur erstellen

DELIMITER //
CREATE PROCEDURE addUser
(IN uCode VARCHAR(50),IN uName VARCHAR(20),IN uRole INT,IN sex INT,IN tel VARCHAR(30))
BEGIN
INSERT INTO smbms_user (userCode,userName,userRole,gender,phone)
VALUES(uCode,uName,uRole,sex,tel);
END//
DELIMITER //
查看存储过程 show procedure status;
<insert id="saveUser">
CALL addUser(#{userCode},#{userName},#{userRole},#{gender},#{phone})
</insert>
public int saveUser(
@Param("userCode") String userCode,
@Param("userName") String userName,
@Param("userRole") Integer userRole,
@Param("gender") Integer gender,
@Param("phone") String phone);
public List<User> findUserListPage(String queryUserName, 
Integer queryUserRole, 
Integer currentPageNo, Integer pageSzie);

public boolean saveUser(String userCode, String userName, Integer userRole,
Integer gender, String phone) {
SqlSession sqlSession = null;
int row = 0; // 受影响的行数
try {
sqlSession = MyBatisUtil.createSqlSession();
row = sqlSession.getMapper(UserMapper.class).saveUser(userCode, userName, userRole, gender, phone);
// 提交事务
sqlSession.commit();
} catch (Exception e) {
if (sqlSession != null) {
sqlSession.rollback();
}
row = 0;
e.printStackTrace();
} finally {
MyBatisUtil.closeSqlSession(sqlSession);
}
if (row > 0) {
return true;
}
return false;
}

userService.saveUser("zhangcuishan", "亚索", 1, 2, "15645678941");

Trigger erstellen

创建两张表
create table my_goods(
id int primary key auto_increment,
name varchar(20) not null,
inv int
)
create table my_orders(
id int primary key auto_increment,
goods_id int not null,
goods_num int not null)

insert into my_goods values(null,'手机',1000),(null,'电脑',500),(null,'游戏机',100);

DELIMITER //
CREATE TRIGGER a_i_o_t AFTER INSERT ON my_orders FOR EACH ROW
BEGIN
UPDATE my_goods SET inv =inv -new.goods_num WHERE id=new.goods_id;
END
//
DELIMITER ;

DELIMITER //
CREATE TRIGGER b_i_o_t BEFORE INSERT ON my_orders FOR EACH ROW 
BEGIN 
SELECT inv FROM my_goods WHERE id=new.goods_id INTO @inv;
IF @inv <new.goods_num THEN 
INSERT INTO xxx VALUES('xx');
END IF;
END 
//
DELIMITER //
 

测试 insert into my_orders values(null,3,5);

Das obige ist der detaillierte Inhalt vonDer Unterschied zwischen gespeicherten MySQL-Prozeduren und Triggern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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