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


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

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

     

  • 相关阅读:
    教你用笔记本破解无线路由器password
    EJB究竟是什么,真的那么神奇吗??
    Hibernate的介绍
    编程基本功训练:流程图画法及练习
    一年成为Emacs高手(像神一样使用编辑器)
    MfC 进度条控件
    最小生成树(普利姆算法、克鲁斯卡尔算法)
    创建与删除索引
    hdu 4876 ZCC loves cards(暴力)
    springMVC3学习(二)--ModelAndView对象
  • 原文地址:https://www.cnblogs.com/always-online/p/3928727.html
Copyright © 2020-2023  润新知