黑马程序员:Java面试题之数据库存储过程与触发器

这个问题非常考验个人能力水平和自我积累!这样的问题拿高薪必看哦!

1.create procedure insert_Student (_name varchar(50),_age int ,out _id int)

2.

3.begin

4.

5.insert into student value(null,_name,_age);

6.

7.select max(stuId) into _id from student;

8.

9.end;

10.

11.call insert_Student('wfz',23,@id);

12.

13.select @id;

14.

15.mysql> create trigger update_Student BEFORE update on student FOR EACH

ROW

16.

17.-> select * from student;

触发器不允许返回结果

1.create trigger update_Student BEFORE update on student FOR EACH ROW

2.

3.insert into student value(null,'zxx',28);

mysql的触发器目前不能对当前表进行操作

1.create trigger update_Student BEFORE update on student FOR EACH ROW

2.

3.delete from articles where id=8;

这个例子不是很好,最好是用删除一个用户时,顺带删除该用户的所有帖子

这里要注意使用OLD.id

触发器用处还是很多的,比如校内网、开心网、Facebook,你发一个日志,自动通知好友,其实就是在增加日志时做一个后触发,再向通知表中写入条目。因为触发器效率高。而UCH没有用触发器,效率和数据处理能力都很低。

存储过程的实验步骤:

1.mysql> delimiter |

2.

3.mysql> create procedure insertArticle_Procedure (pTitle

varchar(50),pBid int,out

4.

5.pId int)

6.

7.-> begin

8.

9.-> insert into article1 value(null,pTitle,pBid);

10.

11.-> select max(id) into pId from article1;

12.

13.-> end;

14.

15.-> |

16.

17.Query OK, 0 rows affected (0.05 sec)

18.

19.mysql> call insertArticle_Procedure('传智播客',1,@pid);

20.

21.-> |

22.

23.Query OK, 0 rows affected (0.00 sec)

24.

25.mysql> delimiter ;

26.

27.mysql> select @pid;

+------+

| @pid |

+------+

| 3 |

+------+

1 row in set (0.00 sec)

mysql> select * from article1;

+----+--------------+------+

| id | title | bid |

+----+--------------+------+

| 1 | test | 1 |

| 2 | chuanzhiboke | 1 |

| 3 | 传智播客| 1 |

+----+--------------+------+

3 rows in set (0.00 sec)

触发器的实验步骤:

1.create table board1(id int primary key auto_increment,name varchar(50),ar

2.

3.ticleCount int);

4.

5.create table article1(id int primary key auto_increment,title

varchar(50)

6.

7.,bid int references board1(id));

8.

9.delimiter |

10.

11.create trigger insertArticle_Trigger after insert on article1 for each

ro

12.

13.w begin

14.

15.-> update board1 set articleCount=articleCount+1 where id= NEW.bid;

16.

17.-> end;

18.

19.-> |

20.

21.delimiter ;

22.

23.insert into board1 value (null,'test',0);

24.

25.insert into article1 value(null,'test',1);

还有,每插入一个帖子,都希望将版面表中的最后发帖时间,帖子总数字段进行同步更

能需要用declare方式声明一个变量,或者是用NEW.posttime来生成。

相关主题
相关文档
最新文档