我在mysql-table mytable
中公开行并稍微更新profiles_id
- 列。
有很多行需要进行更新和更新。
有时我收到一个MYSQL错误:TMP table already exists
和我无法弄清楚为什么甚至在命令中重新创建错误。想法?改进措施?
(我正在运行CodeIgniter的Active Record以下内容)
$where = '';
foreach($vars as $var) {
$where .= "id = '$var->id' OR ";
}
$where = substr($where , 0, -4);
$this->db->query("CREATE TEMPORARY TABLE tmp SELECT * from mytable WHERE ( " . $where . " ) && users_id = '$user_id';");
$this->db->query("ALTER TABLE tmp drop id;");
$this->db->query("UPDATE tmp SET profiles_id = '$profile_id';");
$this->db->query("INSERT INTO mytable SELECT 0,tmp.* FROM tmp; ");
$this->db->query("DROP TABLE tmp;");
答案 0 :(得分:0)
好吧,我明白了。发送查询并发生错误时,不执行最后一个查询DROP TABLE tmp
。这个临时表一直存在,直到DB连接断开。
$this->db->query("DROP TEMPORARY TABLE IF EXISTS tmp;");
$this->db->query("CREATE TEMPORARY TABLE tmp SELECT * from mytable WHERE ( " . $where . " ) && users_id = '$user_id';");
$this->db->query("ALTER TABLE tmp drop id;");
$this->db->query("UPDATE tmp SET profiles_id = '$profile_id';");
$this->db->query("INSERT INTO mytable SELECT 0,tmp.* FROM tmp; ");
$this->db->query("DROP TABLE tmp;");
所以通过在开头添加DROP IF EXISTS
,这就解决了。