这似乎是一个老问题,但我没有找到任何正确解决我问题的方法。我将解释我面临的问题。
在我的代码部分中,我在插入之前检查了表,表是否已经具有特定列的值。
select vid from mytable where vid=$vid;
如果vid值不存在,那么我必须在mytable
中执行插入查询,否则无需插入。
但问题在于某些情况如何,在某些情况下,已经向应用程序发送了同步请求,并且上述代码已被执行了一次以上。所以同一个视频有一些重复的条目。我该如何防止这个问题。我可以使用begintransaction和endtransaction方法,还是有可用的锁方法?。
除了key之外,在创建表时没有为vid设置约束。该表有500万条记录。因此无法进行约束更新。
答案 0 :(得分:0)
是的,您可以使用非常简单的逻辑来完成此操作。 请按照以下步骤操作
在代码点火器中,所有这些都将在模型中完成
<强>控制器强>
$array = array("database column name" = $vid) // make that array according to you database
$this->modle_class_name->data_checker($array);
<强>模型强>
// check whole row in database
public function data_checker($info_check){
$this->db->select("*");
$this->db->from("table name");
$this->db->where($info_check); // will check whole row in database
$this->result = $this->db->get();
if($this->result->num_rows() > 0){
// you data exist
return false;
} else {
// data not exist insert you information
$this->db->insert("table name", $info_check);
return true;
}
}
OR
<强>模型强>
// check row by column in database
public function data_checker($info_check){
$this->db->select("*");
$this->db->from("table name");
$this->db->where("column name", $info_check["column name"]); // will check row by column name in database
$this->result = $this->db->get();
if($this->result->num_rows() > 0){
// you data exist
return false;
} else {
// data not exist insert you information
$this->db->insert("table name", $info_check);
return true;
}
}
我希望这能解决你的问题。因为这适合我。
答案 1 :(得分:0)
你只需要制作字段&#34; vid&#34;在你的表中是唯一的:
ALTER IGNORE TABLE mytable ADD UNIQUE (vid);
对于MySQL 5.7.4或更高版本:
ALTER TABLE mytable ADD UNIQUE (vid);