在mysql中使用事务创建过程

时间:2018-05-09 10:59:50

标签: mysql database

我真的需要帮助,mysql很新。您需要编写一个事务来检查,如果您插入数据,密码长度是4个字符,那么事务回滚,否则该条目将插入到表中。为了实现,我们使用了程序

                         ` CREATE PROCEDURE PROC (@id int (11), @log 
                         varchar (45), @em 
                      varchar (45),
                      @pass int (45),@st int (11));
                      AS
                      BEGIN
                      BEGIN 
                      START TRANSACTION;
                      INSERT INTO user 
               (`id_User`,`login`,`email`,`password`,`status`) 
                VALUES(@id, @log, @em, @pass, @st); 
              COMMIT
              END 
              BEGIN 
              IF (length(@pass) < 4)
                BEGIN
                 ROLLBACK
                      END
                       END 
                       END`

1 个答案:

答案 0 :(得分:0)

对于您想要做的事情,您根本不需要交易。您发布的代码在回滚之前已经提交,因此即使密码少于4个字符,仍然会发生插入,并且不会有任何事务要回滚。除此之外,您正在以错误的方式使用变量。但是,如果您通过不仅仅向数据库添加任何条目来验证用户输入,那么这是不好的做法。您应确保无法从表单提交少于4个字符的密码。

看看下面的内容:

CREATE DEFINER=`root`@`localhost` PROCEDURE `proc`(
    v_id int (11), 
    v_log varchar (45), 
    v_em varchar (45),
    v_pass int (45),
    V_st int (11)
)
BEGIN
    IF(LENGTH(v_pass) >= 4) THEN
        INSERT INTO user (`id_User`,`login`,`email`,`password`,`status`) 
        VALUES(v_id,v_log, v_em, v_pass, V_st);
    END IF;
END

希望这有帮助。