[英]MySql auto_increment plus a certain number
我希望我表中的id字段比连续数字更具“随机性”。
有没有一种方法可以在id字段中插入一些内容,例如+9,这将告诉db使用当前的auto_increment值并将其添加9?
您有设计缺陷。 不用理会自动递增,并改组查询结果(获取数据时)
尽管这通常用于解决复制问题,但是您可以为auto_increment设置一个增量值:
由于这既是会话设置,又是全局设置,因此您只需在插入之前设置会话变量即可。
除此之外,您可以通过使用MAX()
获取当前值,然后添加所需的任何数字并插入该值来手动执行此操作。 如果您尝试插入重复值,MySQL会通知您。
以下是用PDO编写的,有mysqli等效项 。
这只是一个任意的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));
一个想法..(未测试)
CREATE TRIGGER
'updateMyAutoIncrement' BEFORE INSERT
ON
'数据库名称'。'表名称' FOR EACH ROW
BEGIN
DECLARE
aTmpValueHolder INT DEFAULT 0;
SELECT
AUTO_INCREMENT INTO
aTmpValueHolder FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA =
'数据库名称' AND TABLE_NAME =
'TableName' ;
SET NEW
.idColumnName =
aTmpValueHolder + 9;
END
编辑:如果上述触发器不起作用,请尝试将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是随机数的范围。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.