MySql自动增量加上某个数字

MySql自动增量加上某个数字,mysql,auto-increment,Mysql,Auto Increment,我希望表中的id字段比连续数字更“随机” 有没有办法在id字段中插入一些内容,比如+9,它会告诉db获取当前的auto_增量值并向其中添加9 您有一个设计缺陷。不要使用自动增量,而是将查询结果洗牌(在获取数据时)虽然这通常用于解决复制问题,但您可以为自动增量设置增量值: 因为这既是一个会话,也是一个全局设置,所以您只需在插入之前设置会话变量即可 除此之外,您还可以使用MAX()手动获取当前值,然后添加所需的任何数字并插入该值。如果您试图插入重复的值,MySQL会让您知道。据我所知,无法“洗牌”

我希望表中的id字段比连续数字更“随机”


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

您有一个设计缺陷。不要使用自动增量,而是将查询结果洗牌(在获取数据时)

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

因为这既是一个会话,也是一个全局设置,所以您只需在插入之前设置会话变量即可

除此之外,您还可以使用
MAX()
手动获取当前值,然后添加所需的任何数字并插入该值。如果您试图插入重复的值,MySQL会让您知道。

据我所知,无法“洗牌”您当前的ID。如果您愿意,您可以在将来使用非线性ID。 以下是用PDO编写的,有。

$sql = "UPDATE tableName SET ID = :randomizer WHERE ID=:lastID ";
$q = $conn->prepare($sql);
$q->execute(array(':lastID' => $lastID , ':randomizer' => $randomizer));
这只是一个任意的
插入
语句

$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并
更新先前插入的记录。

$sql = "UPDATE tableName SET ID = :randomizer WHERE ID=:lastID ";
$q = $conn->prepare($sql);
$q->execute(array(':lastID' => $lastID , ':randomizer' => $randomizer));
一个主意。。(未测试)

  • 创建触发器
    “updateMyAutoIncrement”
  • 插入前的
  • “DatabaseName.”“TableName”上
  • 每行的
  • 开始
  • DECLARE
    aTmpValueHolder
    INT默认值0
  • 选择
    自动增量到
    aTmpValueHolder
  • 来自信息\u架构表
  • 其中TABLE_SCHEMA=
    'DatabaseName'
  • 和TABLE_NAME=
    “TableName”
  • SET NEW
    .idColumnName
    =
    aTmpValueHolder
    +9
  • 结束
    编辑:如果上述触发器不起作用,请尝试将
    AUTO_INCREMENT
    值直接更新到系统架构中。但正如Eric所指出的,你的设计似乎有缺陷。我不认为这里有自动递增的意义

    编辑2:更多的“随机”和更少的线性数

  • SET NEW
    .idColumnName
    =
    aTmpValueHolder
    +RAND(10)
  • 编辑3:正如Jack Williams所指出的,
    Rand()
    产生一个介于0和1之间的
    float
    值。 因此,要生成整数,我们需要使用floor函数将“随机”浮点转换为整数

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


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

    那么,如何将9添加到每个id将使其成为“随机的”?9只是一个占位符,随机性将在php中处理@jackwilliams,那个insert语句是什么样子的?对不起,我只是略读了一下问题。你想让你的程序为你还是mysql做这件事?您可以创建一个触发器,该触发器将在插入之前更新自动增量值。@SujanSivagurunathan我更喜欢在mysql中这样做,我想限制我的数据库调用。这个答案在技术上是正确的。在评论中辩论,而不是反对票。我是反对票的选民,让我解释一下原因:这家伙想洗牌(或随机化)数据。你正在推动一些技术解决方案,而实际上设计非常糟糕。如果他需要洗牌记录,那么它应该发生在抓取而不是存储上。弄乱自动递增可能是最糟糕的解决方案和想法,这与数据库设计背道而驰。@Eric我实际上不想随机化数据。它应该是基本一致的,我(或者更确切地说,我的搭档)只是不希望id太连续。这很琐碎,但这样顺序id就不会显得太线性。对我来说是有意义的。您可以通过订单号很容易地提供内部业务统计数据。最好让它们是非线性的。让我们不要太封闭吧,伙计们?
    +9
    是一个占位符,OP want是一个随机数。OP可以替换
    +9
    +RAND(x)其中x是可能的最大随机数。当然,在MySQL中不是。什么不是?请解释一下,你说得对。然后可以使用floor函数将其转换为整数。