Mysql—确定存储过程中插入的行数

Mysql—确定存储过程中插入的行数,mysql,sql,stored-procedures,Mysql,Sql,Stored Procedures,基本上我有一个sql存储过程: drop procedure if exists registrar_cuenta; delimiter // create procedure registrar_cuenta (in p_email varchar(255), in p_passwordHash varchar(40), in p_salt varchar(40)) begin if (exists(select 1 from usuarios where e

基本上我有一个sql存储过程:

drop procedure if exists registrar_cuenta; 
delimiter // 

create procedure registrar_cuenta (in p_email varchar(255), in p_passwordHash varchar(40), in p_salt varchar(40)) 
    begin 
        if (exists(select 1 from usuarios where email = p_email and registrado = 0)) then 
            update usuarios set passwordHash = p_passwordHash, salt = p_salt, fechaRegistro = now(), registrado = 1  where email = p_email and registrado = 0; 
        else
            insert into usuarios (email, passwordHash, salt, fechaRegistro, registrado) values (p_email, p_passwordHash, p_salt, now(), 1); 
        end if; 
    end 
    // 

delimiter ;
这运行得很好,但我想更改这段代码:

else
    insert into usuarios (email, passwordHash, salt, fechaRegistro, registrado) values (p_email, p_passwordHash, p_salt, now(), 1); 
end if; 
对于这样的事情:

    insert into usuarios (email, passwordHash, salt, fechaRegistro, registrado) values (p_email, p_passwordHash, p_salt, now(), 1); 

    if (inserted_rows == 0) then 
        alter table usuarios auto_increment = auto_increment - 1; 
    end if; 
问题是,我有一个唯一的字段(电子邮件),它可能会产生重复输入错误,如果是这样,那么自动增量值无论如何都会增加,我希望避免这种情况


有什么方法可以归档此任务吗?

听起来您想使用
行计数功能

MySQL解决方案

您可以使用
alter table…
,如下例所示:

alter table usuarios
 auto_increment = ( SELECT ( AUTO_INCREMENT - 1 )
                    FROM INFORMATION_SCHEMA.TABLES
                    WHERE TABLE_NAME='usuarios' and TABLE_SCHEMA=DATABASE()
                  ); 

但是,这种做法是不可取的。如果使用
int unsigned
定义列,则可以存储的最大值为
4294967295
,如果它是
bigint unsigned
则最大值为
18446744073709551615
。如果数据库引擎每秒可以插入
100000条
记录,请计算您自己,跨越最大值需要多少小时(天/月/年)。因此,您可以忽略被浪费的自动递增值。

您是否尝试在插入之前计算一次又一次的计数?您好,谢谢您的评论,这是我的最后一个选择,因为我想知道是否存在任何优化形式(受影响的布尔值等)来确定是的,这是我正在寻找的,但是mysql似乎不允许为了保护数据而重置自动增量(它抛出了一个语法错误)。这句话就是我刚才提到的:“alter table usuarios auto_increment=auto_increment-1”这两个答案都很好,@Rawinder的答案实际上让我做出了决定,但这个答案明确地解决了问题本身的问题。感谢你澄清这一点,是的,我在其他地方读到了类似的东西,是的,它会导致不必要的开销,我会让它这样