黑马程序员: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来生成。