mysql存储过程和触发器有啥具体区别

  

本文主要给大家简单讲讲mysql存储过程和触发器有啥具体区别,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望mysql存储过程和触发器有啥具体区别这篇文章可以给大家带来一些实际帮助又是;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

 mysql存储过程和触发器有啥具体区别

存储过程:
是在大型数据库系统中,
一组为了完成特定功能的SQL语句集,
存储在数据库中,经过第一次编译后再次调用不需要再次编译,
用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库中的一个重要对象

优点:
1允许模块化程序设计(创建一次多次使用)
2允许更快执行
3减少网络流量
4更好的安全机制

格式:

分隔符//创建过程储存名([,,INOUT] ?参数名?数据类形……)
  开始
  SQL语句//结束
  分隔符;

调用过程:

用电话过程名()

查看所有的存储过程显示程序状态;
查看创建的存储过程显示创建过程过程名;
删除过程下降过程过程名

表示参数从外部传入到里面使用(过程内部使用)
出表示参数从过程里边把数据保存到变量中,交给外部使用,所有传入的必须是变量如果说传入的了变量本身在外部有数据,那么在进入过程之后,第一件事就是被清空,设为null
Inout数据可以从外部传入到过程内部使用,同时内部操作之后,又会将数据返回给外部

触发器:

触发器是一种特殊类型的存储过程,它又不同于存储过程,
触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。

作用:
1。可在写入数据表前,强制检验或转换数据
2。触发器发生错误时,异动的结果会被撤销

格式

分隔符//创建触发器——触发器名字触发时机触发事件为每个表
  行
  开始
  ——操作的内容//结束
  分隔符;

触发对象:对表的每一行触发器绑定实质是表中的所有行,因此当每一行发生改变的时候,就会触发触发器
触发时机:每张表中对应的行都会有不同的状态,当SQL指令发生的时候,
都会令行中的数据发生改变,每一行总会有两个状态。操作数据之前(前),操作数据(后)之后
触发事件:
Mysql中触发器针对的目标是数据发生改变,对应的操作只有(增、删、改)查询不发生数据的改变,
所以查询没有触发事件
注意事项:
一张表中,每一个触发器时机绑定的触发事件对应的触发器类型只能有一个;
一张表中只能有一个插入后触发器因此,一张表中最多的触发器只能有六个

创建存储过程

分隔符//创建过程addUser
  (在uCode VARCHAR (50), uName VARCHAR(20),在uRole INT, INT性,在电话VARCHAR (30))
  开始
  插入smbms_user (userCode、用户名userRole、性别、电话)
  值(uCode, uName uRole、性别、电话);//结束
  分隔符//查看存储过程显示程序状态;
  & lt;插入id=皊aveUser"祝辞
  调用addUser (# {userCode}, {userName} #, # {userRole}, #{性别},#{电话})
  & lt;/insert>
  公共int saveUser (
  @Param (“userCode")字符串userCode,
  @Param (“userName")字符串的用户名,
  @Param (“userRole")整数userRole,
  @Param (“gender")整数的性别,
  @Param (“phone")字符串电话);
  公共ListqueryUserName findUserListPage(字符串,
  整数queryUserRole,
  整数currentPageNo,整数pageSzie);
  
  userCode公共布尔saveUser(字符串,用户名的字符串,整数userRole,
  整数性别、字符串电话){
  SqlSession SqlSession=零;
  int行=0;//受影响的行数
  尝试{
  sqlSession=MyBatisUtil.createSqlSession ();
  行=sqlSession.getMapper (UserMapper.class)。saveUser (userCode、用户名userRole、性别、电话);//提交事务
  sqlSession.commit ();
  }捕捉(异常e) {
  如果(sqlSession !=null) {
  sqlSession.rollback ();
  }
  行=0;
  e.printStackTrace ();
  最后}{
  MyBatisUtil.closeSqlSession (sqlSession);
  }
  如果行比;0){
  返回true;
  }
  返回错误;
  }
  
  userService.saveUser (“zhangcuishan",“亚索“,1,2,“15645678941“);

创建触发器

<>前创建两张表   创建表my_goods (   id auto_increment int主键,   名字varchar(20)没有空,   发票int   )   创建表my_orders (   id auto_increment int主键,   goods_id int非空,   goods_num int not null)      插入my_goods值(null, & # 39;手机& # 39;,1000),(null, & # 39;电脑& # 39;,500),(null, & # 39;游戏机& # 39;,100);      分隔符//为每一行创建触发器a_i_o_t my_orders插入后   开始   更新my_goods设置发票=发票之事。goods_num id=new.goods_id;   结束//分隔符;      分隔符//创建触发器b_i_o_t在插入之前my_orders为每一行   开始   选择发票从my_goods id=new。goods_id @inv;   如果@inv & lt;新的。goods_num然后   插入xxx值(& # 39;xx # 39;);   如果;   结束//分隔符//测试插入my_orders值(空,3、5);

mysql存储过程和触发器有啥具体区别