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

内容发布更新时间 : 2024/6/3 16:59:31星期一 下面是文章的全部内容请认真阅读。

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

1. 2. 3. 4. 5. 6. 7. 8. 9.

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;

10. 11. 12. 13. 14. 15. 16. 17.

复制代码 -> select * from student;

mysql> create trigger update_Student BEFORE update on student FOR EACH ROW

select @id;

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

触发器不允许返回结果

1. 2. 3.

create trigger update_Student BEFORE update on student FOR EACH ROW

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

复制代码

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

1. 2. 3.

create trigger update_Student BEFORE update on student FOR EACH ROW

delete from articles where id=8;

复制代码

这个例子不是很好,最好是用删除一个用户时,顺带删除该用户的所有帖子 这里要注意使用OLD.id

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

1. 2. 3. 4. 5. 6. 7. 8. 9.

mysql> delimiter |

mysql>

create

procedure

insertArticle_Procedure

(pTitle

varchar(50),pBid int,out

pId int)

-> begin

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

10. 11. 12. 13. 14. 15.

-> | -> end;

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

16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27.

复制代码 mysql> select @pid; mysql> delimiter ;

Query OK, 0 rows affected (0.00 sec) -> |

mysql> call insertArticle_Procedure('传智播客',1,@pid); Query OK, 0 rows affected (0.05 sec)

+------+ | @pid | +------+ | 3 | +------+

1 row in set (0.00 sec) mysql> select * from article1; +----+--------------+------+ | id | title | bid |

+----+--------------+------+ | 1 | test | 1 |

| 2 | chuanzhiboke | 1 | | 3 | 传智播客 | 1 |