php - 什么可以限制 MYSQL 表中自增索引列的值达到过大?

标签 php mysql auto-increment

当表不断增删改查时,如何防止MYSQL自增索引的值达到天文数字?在达到字段的大小限制之前,如何防止它无限制地增加?目前,我是通过每次添加记录时删除并重新添加索引列来实现的,但我担心当表有多个同时用户时这可能会导致问题。我希望将表的大小保持在最近的 30 条记录,因此每次添加新记录时删除 id=1 的记录,然后删除并重新添加索引列以重置索引。没有使用索引值的外键或其他代码,因此更改索引值和行之间的关联并不代表有问题。这是我当前的 PHP 代码:

if ($count > 30) {
$sql = "DELETE FROM news WHERE id=1";

if (mysqli_query($con, $sql)) {
}
$deletecolumn= mysqli_query($con,"ALTER TABLE news DROP id");
$added= mysqli_query($con,"ALTER TABLE news ADD id INT(11) NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST;");
}

有更好的方法吗?

最佳答案

从数据中创建一个 HASH 并将其用作主键可能会更好,或者串联主键可能更适合。

要维护前 X 条记录,您需要一个时间戳。添加一个后,您可以删除最旧的。您可以运行一个 cron 来删除旧的。

然后您可以使用:

SELECT `col1`, `col2` FROM `mytable` ORDER BY `added_timestamp` DESC LIMIT 30

更新: 在 30 个最新的之后删除将是:

DELETE FROM `mytable` WHERE `added_timestamp` NOT IN (SELECT `d2`.`added_timestamp` FROM `d2`.`mytable` AS `d2` ORDER BY `d2`.`added_timestamp` DESC LIMIT 30)

但是,此查询在每次插入后运行效率不高。我会在 cron 中运行它。

另一种方法是插入后删除:

DELETE FROM `mytable` ORDER BY `added_timestamp` ASC LIMIT 1

但是您可能会遇到并行运行它的问题。

关于php - 什么可以限制 MYSQL 表中自增索引列的值达到过大?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58270911/

相关文章:

android - 在 Android 的 Room 库中重置自动增量

php - INSERT INTO 表 VALUES.. 与 INSERT INTO 表 SET 错误

javascript - JSPDF 和 AutoTable 的问题

php - 更改 SESSION 变量值

php - 我想问一下关于多表的Mysql Select

php - 使用 fpdf 的 pdf 分页符过多

mysql - 如果自增值达到极限怎么办?

php - mysql 的双重输出。我想知道我做错了什么

mysql - 在 SQL 查询中复制和移动列

sql - 如何在 PostgreSQL 中设置自增主键?