[英]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.