标签:style blog http color io for ar 2014 art
对于以下存储过程,表结构如下:
-- ---------------------------- -- Table structure for person -- ---------------------------- DROP TABLE IF EXISTS `person`; CREATE TABLE `person` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) DEFAULT NULL, `age` int(11) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8; -- ---------------------------- -- Records of person -- ---------------------------- INSERT INTO `person` VALUES (‘1‘, ‘lisi‘, ‘21‘, ‘li123456‘); INSERT INTO `person` VALUES (‘2‘, ‘zhangsan‘, ‘23‘, ‘zhang123456‘);
一、增加
对于mysql来说,默认的行为是在每条SQL语句执行后执行一个COMMIT语句,从而有效的将每条语句独立为一个事务。 所以,如果存储过程中有两个修改语句,那么这两个语句也是独立的。第一条执行成功后第二条执行失败的时候,第一条语句的事务不会回滚。所以为了保证这两条语句的事务的同步,就需要加上START TRANSACTION;与 COMMIT;块,并且把这两条语句放在这个块之中。
DROP PROCEDURE IF EXISTS proc_person_insert; CREATE PROCEDURE proc_person_insert( IN uusername VARCHAR(255), IN uage INT(11), IN upassword VARCHAR(255), OUT flag INT(11) ) BEGIN START TRANSACTION; INSERT INTO person (username, age, password) values (uusername, uage, upassword); SET flag = ROW_COUNT(); -- 保存sql语句操作后影响的行数 COMMIT; END; CALL proc_person_insert(‘lisi12‘, 22, ‘123456‘, @flag); SELECT @flag;
@falg 值为1,则插入成功。执行结果如下:
二、修改
DROP PROCEDURE IF EXISTS proc_person_update; CREATE PROCEDURE proc_person_update( IN uid INT(11), IN uusername VARCHAR(255), IN uage INT(11), IN upassword VARCHAR(255), OUT flag INT(11) ) BEGIN START TRANSACTION; UPDATE person SET username = uusername, age = uage, password = upassword WHERE id = uid; SET flag = ROW_COUNT(); -- 保存sql语句操作后影响的行数 COMMIT; END; CALL proc_person_update(1, ‘zhaoliu‘, 20, ‘zhao123‘, @flag); SELECT @flag;
@falg 值为1,则更新成功。执行结果如下:
三、查询
1、根据id查询单个
此时将返回结果集。
DROP PROCEDURE IF EXISTS proc_person_findOne; CREATE PROCEDURE proc_person_findOne( IN uid INT(11) ) BEGIN SELECT username, age, password FROM person WHERE id = uid; END; CALL proc_person_findOne(1);
执行结果如下:
2、查询所有
返回多个结果集
DROP PROCEDURE IF EXISTS proc_person_findAll; CREATE PROCEDURE proc_person_findAll() BEGIN SELECT id, username, age, password FROM person; END; CALL proc_person_findAll();
执行结果如下:
四、删除
DROP PROCEDURE IF EXISTS proc_person_del; CREATE PROCEDURE proc_person_del( IN uid INT(11), OUT flag INT(11) ) BEGIN START TRANSACTION; DELETE FROM person where id = uid; SET flag = ROW_COUNT(); COMMIT; END; CALL proc_person_del(3, @flag); SELECT @flag;
@falg 值为1,则删除成功。执行结果如下:
标签:style blog http color io for ar 2014 art
原文地址:http://www.cnblogs.com/always-online/p/3928727.html