2012-02-29 33 views
0

存在..否則,我產生新的列ID,然後再試一次SQL這是更好的插入行,如果不是我目前使用下面的方法在表中插入一行時,一列不存在以前

$item_id = $this->misc_model->generateId(18); 

    while ($flag == false){ 

     $this->db->where('item_id', $item_id); 
     $sql = $this->db->get($this->db->dbprefix('table')); 

     if ($sql->num_rows()){ 
      $item_id = $this->misc_model->generateId(18); 
     }else{ 
      $flag = true; 
     } 
    } 

這樣做可以做得更快嗎?

IF NOT EXISTS(SELECT 1 FROM table WHERE item_id = $item_id) 
    INSERT INTO table (item_id) VALUES ($item_id) 
+0

也許創建唯一索引'ITEM_ID '並嘗試插入,直到你成功...理論上這可能需要永遠,並不是非常有效,但我認爲上述方法容易出現競爭條件... – Yaniro 2012-02-29 09:47:25

回答

2

如果ITEM_ID是你的主鍵,那麼你就好得多使用AUTO INCREMENT並讓DB您處理該問題。

+0

item_id由函數generateId()...表生成還有一個列(id),它是AUTO_INCREMENT – fxuser 2012-02-29 09:41:00

+0

@fxuser好的,你可能需要解釋你的意圖有點mor細節。這聽起來像你正試圖爲每一行創建另一個唯一的標識符。這有點無意義。什麼是item_id,它代表什麼? – liquorvicar 2012-02-29 13:03:49

+0

item_id是爲每行創建的惟一id,除了id(auto_increment),它實際上是一個隨機的18長度整數 – fxuser 2012-02-29 15:43:57

0

你應該有你的列作爲自動增量,但如果由於某種原因你不能,那會更快,是的!

1

,如果你是好去一個新的ITEM_ID總是那麼您可以在您的INSERT語句

INSERT INTO table_name (item_id) value (RIGHT(CONCAT(UNIX_TIMESTAMP(),UNIX_TIMESTAMP()),18)) 

試試這個,這將始終產生新ITEM_ID你

相關問題