数据库触发器和存储过程

触发器

触发器(TRIGGER)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。

CREATE TRIGGER 触发器名 BEFORE|AFTER 触发事件 ON 表名 FOR EACH ROW 执行语句

每插入一个帖子,都希望将版面表中的最后发帖时间,帖子总数字段进行同步更新,用触发器做效率就很高。校内网、开心网、Facebook,发一个日志,自动通知好友。
Create table board1(id int primary key auto_increment,name varchar(50),articleCount int);

Create table article1(id int primary key auto_increment,title varchar(50),bid int references board1(id));
#把分隔符;改为|
Delimiter |
Create trigger insertArticle_Trigger after insert on article1 for each row begin
->update board1 set articleCount+1 where id=NEW.bid;
->end;
->|
#分隔符设置回来
Delimiter ;

Insert into article1 value(null,”test”,1);

存储过程

语法定义:菜鸟教程
1、存储过程只在创建时进行编译,以后每次执行存储过程都不需要再重新编译,而一般Sql语句每执行一次就编译一次,因此使用存储过程可以大大提高数据库执行速度。
2、通常,复杂的业务逻辑需要多条sql语句。这些语句要分别地从客户机发送到服务器,当客户及和服务器之间的操作很多时,将产生大量的网络传输。如果将这些操作放在一个存储过程中,那么客户机和服务器之间的忘了传输就会大大减少,降低了网络负载。
3、存储过程创建一次便可以重复使用,从而可以减少数据库开发人员的工作量。
4、安全性高,存储过程可以屏蔽对底层数据库对象的直接访问,使用EXECUTE权限调用存储过程,无需拥有访问地测嗯数据库对象的显示权限。
定义存储过程:

Create procedure insert_Student(_name varchar(50),_age int,out_id int)
Begin
Insert into student value(null,_name,_age);
Select max(stuId) into_id from student;
End;
Call insert_Student(‘wf2’,23,@id);
Select @id;

Jdk怎么调用:
加载驱动
获取连接
设置参数
执行
释放连接

Public static void main(String[] args){
    Connection cn = null;
	Callablestatement c= null;
	Try{
	  	Class.forName(“com.mysql.jdbc.Driver”);
	  	cn = DriverManager.getConnection(“jdbc:mysql:///test”,”root”,”root”);
	  	c= cn.prepareCall({call insert_Student(?,?,?)});
		c.registerOutParameter(3,Types.INTEGER);
		c.setString(1,”wangwu”);
		c.setInt(2,25);
		c.execute();
		System.out.println(c.getString(3));
	}catch(Exception e){
	
	}
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值