mysql - 在mysql中创建带有事务的过程

标签 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`

最佳答案

对于你想做的事情,你根本不需要交易。您发布的代码已在回滚之前提交,因此即使密码长度小于 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

希望这有帮助。

关于mysql - 在mysql中创建带有事务的过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50251757/

相关文章:

android - SQLiteException 无法插入行

php - 选择每隔一天来选择巴士行程方向

mysql - Mysql TO_DATE FUNCTION 在 CREATE TABLE 中不起作用

database - 如何将特定日期格式加载到 BigQuery 中

sql - 以 "' )"开头的字符串常量没有结束字符串分隔符

php - 如何将下一个最大数字插入数据库

php - 如何在保持相同数组索引的同时进行排序?

mysql - 如何在考虑权重的情况下随机选择一行?

php - 使用 Codeigniter 3 进行多站点 |数据库自动切换

mysql - SQL LEFT JOIN 作用于两个可能的列