REPLACE始终创建一个新行而不是替换

时间:2013-10-29 16:29:12

标签: mysql replace

我已经创建了一个表,用于存储我正在创建的自定义品牌插件的选项,但我似乎无法使REPLACE正常工作。

如果未设置选项,并且我使用以下选项,则会按预期插入选项 -

REPLACE INTO dd_admin_branding SET `option_name` = "show_custom_footer", `option_value` = "0";

但是,如果我要运行相同的查询但使用不同的option_value,则会添加一个新行,而不是替换现有行 -

REPLACE INTO dd_admin_branding SET `option_name` = "show_custom_footer", `option_value` = "1";

阅读文档,似乎我应该同时制作ID(自动增量)和option_name唯一身份。请有人能告诉我哪里出错了吗?感谢。

以下是我的表格创建方式(从数据库导出表格时收集)

CREATE TABLE IF NOT EXISTS `dd_admin_branding` (
  `ID` smallint(3) NOT NULL auto_increment,
  `option_name` varchar(64) character set latin1 collate latin1_general_ci NOT NULL default '',
  `option_value` longtext character set latin1 collate latin1_general_ci NOT NULL,
  PRIMARY KEY  (`ID`),
  UNIQUE KEY `ID` (`ID`,`option_name`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

1 个答案:

答案 0 :(得分:3)

文件说明:
http://dev.mysql.com/doc/refman/5.0/en/replace.html

  

REPLACE的工作原理与INSERT完全相同,只是如果表中的旧行的与PRIMARY KEY或UNIQUE索引的新行的值相同,则在新行之前删除旧行。插入行。


这意味着,新行(由REPLACE命令插入)必须提供PRIMARY KEY或UNIQUE KEY的所有值。

但问题中的REPLACE命令仅引用option_nameoption_value,但不提供idid + option_name

在这种情况下,REPLACE的工作方式与普通的INSERT完全相同,它在插入新行之前不会删除行。