今天继续体验mysql,学习了关于存储过程的知识,在实际工作中比较实用!上完课后老师让我们试验一下在存储过程中能不能嵌套事务,试了很多次老提示错误,屏幕如下:
试了n次都有错,改了n遍都不行,最后得出结论:在存储过程中不能嵌套事务!不知道这个结论对不对!需要再查一下权威的资料,并在以后的实践中验证!
值得一提的是,今天受“村长”的启发,在procedure里又调用了function,下面是function的代码及执行结果:
提醒初学的读者:调用function用的是select!
procedure的实现过程:
执行一下procedure,结果如下:
上述过程只是非常简单地实现了在procedure中调用function,既没连数据库,也没通过procedure给function传参数!在高手看来也许有点弱,不过,对于我来说,却收获不少!这还要感谢王涛的提醒!通过procedure连数据库,并给functilon传参是下一步将要研究的问题!
小点点(student是表名):
1、 要想让设为自动增长的列在插入数据时(不包括自动增长列)实现自动增长,此列必须也得是主键,说明如下:
修改id列为自动增长,并设为主键
alter table student modify column id int primary key auto_increment
执行插入语句:
insert into student values(‘’,’xxx’);或
insert into student(name) values(‘yyy’)时id列都会实现自动增长!
2、 在某一表上实现存储过程或事务时,必须将其类型设为innodb.语法为:
alter table student engine=innodb或
alter table student type=innodb;
3、 在某一表上实现存储过程之前,必须把“;”结束标记换掉,一般提倡用“//”,语法为:
delimiter //; 存储过程定义完后,再用同样地方法将“//”改为“;”。