MySql auto_increment加上一定数量

时间:2014-04-07 20:03:53

标签: mysql auto-increment

我希望我的表中的id字段更多一些"随机"然后连续数字。

有没有办法在id字段中插入一些内容,比如+9,它会告诉db获取当前的auto_increment值并为其添加9?

4 个答案:

答案 0 :(得分:0)

你有一个设计缺陷。单独保留自动增量并随机播放查询结果(当您获取数据时)

答案 1 :(得分:0)

虽然这通常用于解决复制问题,但您可以为auto_increment设置增量值:

auto_increment_increment

由于这既是会话又是全局设置,您只需在插入之前设置会话变量即可。

除此之外,您可以通过使用MAX()获取当前值来手动执行此操作,然后添加所需的任何数字并插入该值。如果您尝试插入重复值,MySQL会通知您。

答案 2 :(得分:0)

据我所知,不可能“洗牌”您当前的ID。如果你愿意,你可以在将来追求非线性ID。

以下是用PDO编写的,有mysqli equivalents

这只是一个随意的INSERT声明

$name = "Jack";
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
$sql = "INSERT INTO tableName (name) VALUES(:name)";
$q = $conn->prepare($sql);
$q->execute(':name' => $name);

接下来,我们使用lastInsertId()返回上一个插入行的ID,然后将结果连接到rand()

$lastID = $conn->lastInsertId();
$randomizer = $lastID.rand();    

最后,我们使用我们的'随机播放'ID和UPDATE之前插入的记录。

$sql = "UPDATE tableName SET ID = :randomizer WHERE ID=:lastID ";
$q = $conn->prepare($sql);
$q->execute(array(':lastID' => $lastID , ':randomizer' => $randomizer));

答案 3 :(得分:0)

一个想法......(未经测试)

  1. CREATE TRIGGER'updateMyAutoIncrement'
  2. BEFORE INSERT
  3. ON'DatabaseName'。'TableName'
  4. FOR EACH ROW
  5. BEGIN
  6. DECLARE aTmpValueHolder INT DEFAULT 0;
  7. SELECT AUTO_INCREMENT INTO aTmpValueHolder
  8. FROM INFORMATION_SCHEMA.TABLES
  9. WHERE TABLE_SCHEMA ='DatabaseName'
  10. AND TABLE_NAME ='TableName';
  11. SET NEW。idColumnName = aTmpValueHolder + 9;
  12. END;
  13. 编辑:如果上述触发器不起作用,请尝试将AUTO_INCREMENT值直接更新到系统架构中。但正如Eric所说,你的设计似乎有缺陷。我没有看到在这里有自动增量的意义。

    编辑2:对于更“随机”且线性较小的数字。

    1. SET NEW。idColumnName = aTmpValueHolder + RAND(10);
    2. 编辑3:正如杰克·威廉姆斯所指出的那样,Rand()会产生0到1之间的float值。 因此,要产生一个整数,我们需要使用一个floor函数将'random'float转换为一个整数。

      SET NEW。idColumnName = aTmpValueHolder + FLOOR(a + RAND() * (b - a));

      其中a和b是随机数的范围。