zoukankan      html  css  js  c++  java
  • 存储过程之七—存储过程增删改查

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

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

     

  • 相关阅读:
    京东咚咚架构演讲读后感
    京东峰值系统设计读后感
    游戏服务器的架构演讲读后感
    菜鸟弹性调度系统的架构设计读后感
    阿里如何实现秒级百万TPS?搜索离线大数据平台架构解读读后感
    阿里游戏高可用架构设计实践读后感
    淘宝架构背后——零售业务中台架构设计探讨及实践读后感
    本地存储的时候需要类型转换
    禁止输入框显示用户历史输入历史记录
    项目必备!永无 bug 注释
  • 原文地址:https://www.cnblogs.com/always-online/p/3928727.html
Copyright © 2011-2022 走看看