存储过程之七—存储过程增删改查

简介:   对于以下存储过程,表结构如下: -- ---------------------------- -- Table structure for person -- ---------------------------- DROP TABLE IF EXISTS `person`; ...

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

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

 

目录
相关文章
|
3月前
|
SQL Java 数据库连接
java链接hive数据库实现增删改查操作
java链接hive数据库实现增删改查操作
144 0
|
3月前
|
SQL 数据库 索引
gorm普通的增删改查
gorm普通的增删改查
25 0
|
3月前
|
存储 BI 数据库
PowerApps教程-实现简单的增删改查
PowerApps是Microsoft提供的低代码开发平台,允许用户无需编写大量代码,通过直观的界面设计快速创建应用程序。通过PowerApps的数据连接功能,系统可以轻松地与其他Microsoft 365服务(如SharePoint、Excel)进行集成,实现数据的无缝交互。本文详细介绍了如何使用PowerApps快速开发一个支持增删改查的报表页面,采用SharePoint上的List作为数据源。
58 0
|
2月前
|
关系型数据库 MySQL 数据库
|
3月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(一)
MySQL | 数据库的管理和操作【表的增删改查】
|
3月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的管理和操作【表的增删改查】(二)
MySQL | 数据库的管理和操作【表的增删改查】(二)
|
1月前
|
SQL 数据库连接 API
python链接数据库,实现数据增删改查
python链接数据库,实现数据增删改查
23 7
|
3月前
|
SQL 关系型数据库 MySQL
MySQL | 数据库的表的增删改查【进阶】【万字详解】(二)
MySQL | 数据库的表的增删改查【进阶】【万字详解】(二)
|
3月前
|
存储 关系型数据库 MySQL
MySQL | 数据库的表的增删改查【进阶】【万字详解】(一)
MySQL | 数据库的表的增删改查【进阶】【万字详解】(一)
|
3月前
|
关系型数据库 MySQL 数据库
MySQL | 数据库的管理和操作【表的增删改查】(三)
MySQL | 数据库的管理和操作【表的增删改查】(三)