2

我创建了一个表,其中存储了我正在创建的自定义品牌插件的选项,但我似乎无法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 ;
4

1 回答 1

3

文档指出:
http ://dev.mysql.com/doc/refman/5.0/en/replace.html

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


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

但是问题中的 REPLACE 命令仅引用option_nameand option_value
但不提供id也不提供id+ option_name

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

于 2013-10-29T16:45:14.857 回答