La procédure stockée MySQL est un ensemble d'instructions SQL pour exécuter des fonctions spécifiques dans un grand système de base de données ; les déclencheurs sont un type spécial de procédures stockées ; les déclencheurs sont différents des procédures stockées, et les déclencheurs sont principalement exécutés par déclenchement ; les événements et les procédures stockées peuvent être appelées directement via le nom de la procédure stockée.
Procédure stockée : il s'agit d'un ensemble d'instructions SQL utilisées pour exécuter des fonctions spécifiques dans les grands systèmes de bases de données. Déclencheur : Le déclencheur est un type spécial de procédure stockée. Il est différent de la procédure stockée. Le déclencheur est principalement déclenché par des événements et exécuté, tandis que la procédure stockée peut être appelée directement via le nom de la procédure stockée.
Procédure stockée :
se trouve dans un grand système de base de données,
un ensemble d'instructions SQL pour remplir des fonctions spécifiques,
est stocké dans la base de données, et après le first Il n'est pas nécessaire de recompiler lors d'un nouvel appel après la première compilation
L'utilisateur l'exécute en spécifiant le nom de la procédure stockée et en donnant des paramètres (si la procédure stockée a des paramètres).
La procédure stockée est un objet important dans la base de données
Avantages :
1 permet une programmation modulaire (créer une fois et utiliser plusieurs fois)
2 permet une exécution plus rapide
3 réduit le trafic réseau
4 meilleurs mécanismes de sécurité
Format :
DELIMITER // CREATE PROCEDURE 储存名([ IN ,OUT ,INOUT ]?参数名?数据类形...) BEGIN SQL语句 END // DELIMITER ;
Processus d'appel :
Utiliser le nom du processus d'appel ( )
pour afficher toutes les procédures de stockage afficher l'état de la procédure ;
Afficher la procédure stockée créée show create procédure nom de la procédure ;
Supprimer la procédure supprimer le nom de la procédure
In signifie que les paramètres sont transmis de l'extérieur et utilisés à l'intérieur (utilisés à l'intérieur du processus)
Out signifie que le paramètre enregistre les données dans la variable du processus et les donne à l'extérieur pour utilisation. Si la variable entrante elle-même contient des données à l'extérieur, alors après être entrée dans le processus, la variable entrante elle-même contient des données. première chose Il est effacé et défini sur null
Les données Inout peuvent être transmises de l'extérieur au processus pour un usage interne. En même temps, après l'opération interne, les données seront renvoyées vers l'extérieur
déclencheur Déclencheur :
Le déclencheur est un type spécial de procédure stockée, qui est différent de la procédure stockéeLe déclencheur est principalement déclenché par des événements et exécuté, tandis que les procédures stockées peuvent être exécutées via Le nom de la procédure stockée est appelé directement.
1. Peut forcer la vérification ou la conversion des données avant d'écrire dans la table de données
2 Lorsqu'une erreur de déclenchement se produit, le résultat de la modification sera annulé
format
DELIMITER // Create trigger --触发器名字 触发时机 触发事件 on 表 for each row Begin --操作的内容 End // DELIMITER ;
Objet déclencheur : sur la table pour chaque ligne. La liaison du déclencheur concerne essentiellement toutes les lignes du tableau, donc lorsque chaque ligne change, le déclencheur sera déclenché
Minutage du déclencheur : correspondant à chaque table. . Les lignes auront des états différents. Lorsque la commande SQL est exécutée, fera changer les données de la ligne. Chaque ligne aura toujours deux états. Avant d'exploiter les données (avant), après les données d'exploitation (après)
Événements déclencheurs :
La cible des déclencheurs dans Mysql est la modification des données, et les opérations correspondantes sont uniquement (ajouter, supprimer, modifier) des requêtes qui ne font pas générer des données Change,
Il n'y a donc pas d'événement déclencheur dans la requête
Remarque :
Dans une table, il ne peut y avoir qu'un seul type de déclencheur correspondant à l'événement déclencheur lié à chaque timing de déclenchement ;
Il ne peut y en avoir qu'un dans une table Un déclencheur après insertion Par conséquent, le nombre maximum de déclencheurs dans une table ne peut être que six
Créer une procédure stockée
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");
Créer un déclencheur
创建两张表 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);
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!