博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
存储过程之七—存储过程增删改查
阅读量:6924 次
发布时间:2019-06-27

本文共 2497 字,大约阅读时间需要 8 分钟。

  对于以下存储过程,表结构如下:

-- ------------------------------ 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,则删除成功。执行结果如下:

 

转载地址:http://qukjl.baihongyu.com/

你可能感兴趣的文章
ligerFilter.js每次打开绑定不同字段列表
查看>>
ISCSI服务的配置与管理
查看>>
greenplumn----------单机2segment安装
查看>>
第八单元系统服务的控制
查看>>
ansible编写hadoop群集
查看>>
linux云自动化运维基础知识1
查看>>
ghost系统后变成C盘了别的分区的文件怎样找到
查看>>
navicat 连接阿里云RDS的设置
查看>>
CentOS7 搭建 禅道项目管理服务
查看>>
AlphaGo Zero到底是怎么学习成为了无敌的存在?
查看>>
给人工智能「好奇心」会变成什么样?答案不出所料
查看>>
在linux下安装软件
查看>>
Java的新项目学成在线笔记-day4(六)
查看>>
Jmeter4.0源码二次开发详细分析解读(一)
查看>>
Java各种IO流的总结
查看>>
从手淘搜索到优酷短视频,阿里巴巴是如何在搜索推荐领域下应用深度学习的?...
查看>>
程序员,不甘平凡又害怕努力…
查看>>
基于BC实现的(JAVA版)SM2国密算法签名验签DEMO
查看>>
分布式缓存架构设计
查看>>
初学者学习arm嵌入式有什么好的建议?嵌入式开发学习
查看>>