我希望我的表中的id字段更多一些"随机"然后连续数字。
有没有办法在id字段中插入一些内容,比如+9,它会告诉db获取当前的auto_increment值并为其添加9?
答案 0 :(得分:0)
你有一个设计缺陷。单独保留自动增量并随机播放查询结果(当您获取数据时)
答案 1 :(得分:0)
虽然这通常用于解决复制问题,但您可以为auto_increment设置增量值:
由于这既是会话又是全局设置,您只需在插入之前设置会话变量即可。
除此之外,您可以通过使用MAX()
获取当前值来手动执行此操作,然后添加所需的任何数字并插入该值。如果您尝试插入重复值,MySQL会通知您。
答案 2 :(得分:0)
以下是用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)
一个想法......(未经测试)
CREATE TRIGGER
'updateMyAutoIncrement'BEFORE INSERT
ON
'DatabaseName'。'TableName'FOR EACH ROW
BEGIN
DECLARE
aTmpValueHolder INT DEFAULT 0;
SELECT
AUTO_INCREMENT INTO
aTmpValueHolder FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =
'DatabaseName'AND TABLE_NAME =
'TableName';
SET NEW
。idColumnName =
aTmpValueHolder + 9;
END
; 编辑:如果上述触发器不起作用,请尝试将AUTO_INCREMENT
值直接更新到系统架构中。但正如Eric所说,你的设计似乎有缺陷。我没有看到在这里有自动增量的意义。
编辑2:对于更“随机”且线性较小的数字。
SET NEW
。idColumnName =
aTmpValueHolder + RAND(10);
编辑3:正如杰克·威廉姆斯所指出的那样,Rand()
会产生0到1之间的float
值。
因此,要产生一个整数,我们需要使用一个floor函数将'random'float转换为一个整数。
SET NEW
。idColumnName =
aTmpValueHolder + FLOOR(a + RAND() * (b - a));
其中a和b是随机数的范围。