【发布时间】:2012-02-29 09:36:48
【问题描述】:
当一列不存在时,我目前正在使用以下方法在表中插入一行..否则我会生成新的列ID并重试
$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)
【问题讨论】:
-
也许在
item_id上创建一个唯一索引并尝试插入直到成功...理论上这可能需要很长时间并且效率不高,但我认为上述方法容易出现竞争条件。 ..