插入忽略不会忽略

Posted

技术标签:

【中文标题】插入忽略不会忽略【英文标题】:insert ignore won't ignore 【发布时间】:2012-06-13 06:12:40 【问题描述】:

此代码:将总是插入行,从不检测存在

$r =  mysql_query("INSERT IGNORE INTO facebook (uid,fid) VALUES ('".$_SESSION['id']."','".$persone['id']."')") or die(mysql_error());

为什么?

编辑:请不要,输入值总是相同的

【问题讨论】:

facebook 表的主键是什么? INSERT IGNORE 仅检查主键。 我明白了.. 那么如何将 uid 设为主键? @科斯塔 【参考方案1】:

INSERT IGNORE 仅适用于主键字段。如果您的facebook 表没有设置主键,您可以这样做:

alter table facebook add primary key (uid)

此后,INSERT IGNORE 不会插入重复的行。

【讨论】:

我认为的问题是我不想防止重复键而是重复组合(或行) 然后你可以用ALTER TABLE facebook ADD PRIMARY KEY (uid, fid)把两列都放入主键,或者在插入新行之前检查行是否存在。请注意,如果您已经定义了主键,则需要先使用 ALTER TABLE facebook DROP PRIMARY KEY 删除该键,然后添加新的主键。 报错如下:定义了多个主键 就像我说的,你需要用我写的代码删除以前的主键,然后再次添加主键。

以上是关于插入忽略不会忽略的主要内容,如果未能解决你的问题,请参考以下文章

Perl/DBI/FreeTDS/SQLAzure 一些插入被忽略

插入忽略 - 询问MySQL if语句是否被忽略

忽略插入违反重复键索引的行

插入...选择*,如何忽略身份?

使用 Codeigniter 插入忽略

mysql - 插入后忽略获取主键