我对列的组合有一个唯一的约束,而不是对单个列。如果我试图插入违反此限制的数据,MySQL自然会出错。
顺便说一句,这是通过PHP>CodeIgniter实现的。
我的问题是:在inert上,建议的处理方法是什么?我应该…吗
- 正在抑制错误?(#flamme(
- 是否首先运行查询以确保它不会发生
- 允许该错误,因为它不会对用户造成任何可见的问题
- 使用
replace into
而不是insert into
?(不过,我认为CodeIgniter的Active Record类不提供对replace into
的访问权限?(
上下文:
我有一个标签表,其中存储了用户创建的标签,用于对其内容进行分类:
- id(PK,int,AI,unsigned(
- 标签(varchar 25(
- user_id(FK,int,unsigned(
给定的用户无法创建他之前创建的标签,因此唯一的限制是id和user_id列的组合。
$insert_query = $this->db->insert_string('my_table', $data);
$insert_query = str_replace('INSERT INTO','INSERT IGNORE INTO',$insert_query);
$this->db->query($insert_query);
我认为应该这样做。
在MySQL表中将类型为UNIQUE
的键添加到tag
+user_id
。之后,在Your查询中将处理程序设置为ON DUPLICATE KEY
。你可以避免错误,但不必抑制错误;(