Javascript mysql表AUTO increment以步长而不是1递增。比如41,51,61

Javascript mysql表AUTO increment以步长而不是1递增。比如41,51,61,javascript,mysql,sql,node.js,Javascript,Mysql,Sql,Node.js,即使删除了表中的所有行,仍将继续。它将继续从上次插入的id添加。 我用这个来创建我的表 app.get('/createuserstable', (req, res) => { let sql = 'CREATE TABLE Users(id int AUTO_INCREMENT, name VARCHAR(255), username VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id))'; db.query(sql, (

即使删除了表中的所有行,仍将继续。它将继续从上次插入的id添加。 我用这个来创建我的表

app.get('/createuserstable', (req, res) => {
    let sql = 'CREATE TABLE Users(id int AUTO_INCREMENT, name VARCHAR(255), username VARCHAR(255), email VARCHAR(255), PRIMARY KEY (id))';
    db.query(sql, (err, result) => {
        if (err) throw err;
        console.log(result);
        res.send('Users table created....');
    });
});
添加具有注册路由的用户,并以10步的速度不断递增

app.post('/signup', (req, res) => {
    let user = { name: req.body.name, username: req.body.username, email: req.body.email };
    db.query('INSERT INTO users SET?', user, (error, result) => {
        if (error) throw error;
        res.status(201).send(`User added with ID: ${result.insertId}`);
    });
});
这是用于10行json数据的代码

app.get('/populate', (req, res) => {
    request({
        url: "http://jsonplaceholder.typicode.com/users",
        json: true
    }, (err, resp, body) => {
        //res.send(typeof body);
        for (var i = 0; i < body.length; i++) {

            let post = { id: body[i].id, name: body[i].name, username: body[i].username, email: body[i].email };
            let sql = 'INSERT INTO users SET?';
            let query = db.query(sql, post, (err, result) => {
                if (err) throw err;
                console.log(result);
            });
        };
        res.send('users data added....')
    });

});
app.get('/populate',(req,res)=>{
请求({
url:“http://jsonplaceholder.typicode.com/users",
json:true
},(错误、响应、正文)=>{
//res.send(主体类型);
对于(变量i=0;i{
如果(错误)抛出错误;
控制台日志(结果);
});
};
res.send('已添加用户数据…')
});
});

这是MySQL的正常行为,通常是有意的,因此ID永远不会被重复使用,即使是被删除的记录

如果您确实需要重置自动递增计数器,您可以:

  • 使用
    截断表用户一次清空整个表
  • 使用
    删除表格用户
    /
    创建表格用户…
  • ALTER TABLE users AUTO_INCREMENT=1
另请参见

您已将系统变量从默认值
1
增加到
10
。它的作用域是全局会话,因此您可以为当前会话设置它,也可以为整个服务器更改它(MySQL/8.0.18之前使用的第一个选项是受限的)


如果您根本不需要它,我建议您在设置文件中找到该指令并注释掉。

我不认为这是关于重置计数器;OP说新的ID是相隔10个而不是连续的数字。好吧,但它以10的步数相加的问题呢。如果最后一个id为41,则添加的下一个id为51。我认为这与我如何使用json api中的for循环添加前10行有关。@ChrisG我监督了这一点。我的答案至少回答了问题的第一部分(“即使删除了表中的所有行,仍将继续。它将从最后插入的id继续添加”)。但你是对的,每连续插入10次的增量不能用我的回答来解释。但我不确定OP是否真的观察到ID增加了10,或者OP是否表示自己不准确。好的@PreshyJones,你用什么库插入(what's
db
)?好的,我不太习惯后端ATM。检查文档以确保没有由于某种原因触发的神奇的“批量插入”,但查询语法是正确的,
user
对象足够简单。您确定只调用一次处理程序吗?你有没有做一些日志记录/调试?正如@ChrisG所写的,这是最可能的原因。我想你确实检查了pypMyAdmin中的实际表还是什么?您能否确认这些ID实际上是未使用的,即表中没有41到51之间的任何行?除非您无意中进行了修改,否则这可能是预期的行为。回到@lvaroGonzález的想法,
显示“auto_inc%”等变量的结果是什么?这可以按会话设置,因此您可以按
set@@auto\u increment\u increment=1设置用于新连接。但是,如果您正在与其他人一起处理更大的代码库,如果出于某种原因将其设置为10,我会首先grep,如果您不是数据库管理员,我会首先询问他/她,因为这可能是造成此步长的原因。感谢您的帮助,伙计们@SebastianB。还有克里斯。我被告知cleardb(我正在使用的数据库)按照您所说的方式配置它。