2012-02-15 90 views
0

我的排序與MySQL和DBS在一般新手所以容忍我:)MySQL的AFTER觸發器INSERT自動遞增列

我有一個表 - 其中有一個領域tblfolders「barcodeID」,這是每次將新行插入表時需要增加1的INT。我不能讓這個自動遞增字段,因爲我已經有我的'id'字段自動遞增。

我試着用AFTER INSERT觸發器做這件事,但我一直收到一個錯誤:「無法更新存儲的函數/觸發器中的表'tblfolders',因爲它已經被調用此存儲函數/觸發器的語句使用。

有關如何在插入到表格中自動增加此字段的任何建議?

謝謝!

+0

我真的害怕觸發器:)你不能做不同的事情? – vulkanino 2012-02-15 15:55:26

+0

如何使barcodeId作爲條形碼錶的外鍵,該條形碼錶具有自動增量主鍵... – vulkanino 2012-02-15 15:57:17

+0

哈哈是啊我昨天讀了一些關於觸發器的內容並且很興奮,但它們似乎比它們值得的更麻煩 - 在至少對於我在低水平的專業知識中試圖做的事情:) – FastTrack 2012-02-15 16:01:40

回答

0

UPDATE 使用AUTO_INCREMENT,然後使用PHP與類似的printf sprintf的格式化:

while($row = mysql_fetch_assoc($sql)) { 
    $numberOfZerosINeed = 10-strlen($row['id']); 
    $formated_id = sprintf(" %010s ", $row['id']); // zero-padding works on strings too 
    $row['barcode_id']=$formated_id; 
    $all_rows[]=$row; 
} 

在這點它,如果你有與格式化AUTO_INCREMENT整數列barcode_id!

OLD ANSWER 可以使用的編程語言做類似的東西插入後,很難說什麼是最好的,你應該說明你想要做什麼,如果你使用的是像PHP的東西,爲什麼用auto_increment本身不給你你需要的數據?在PHP中,你可以做一些事情後插入:

$sql = mysql_query("INSERT INTO tblfolders (id, othervales) VALUES ('{$id}', '{$othervalues}') "); 
$last_id = mysql_insert_id(); 
mysql_query("UPDATE tblfolders SET barcode_id='".($old_barcode_id+1)." WHERE id={$last_id} LIMIT 1 "); 
+0

那麼,我可以使用現有的auto_increment字段,但我需要這個'barcodeId'字段左填充零,以便它總是10個字符長。順便說一句,我使用PHP。 – FastTrack 2012-02-15 16:29:38

+0

@FastTrack看到我的更新回答! – Neo 2012-02-15 16:53:50

0

如何使barcodeId作爲條形碼錶的外鍵,該表具有自動增量主鍵?