我已经创建了一个表,用于存储我正在创建的自定义品牌插件的选项,但我似乎无法使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 ;
答案 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_name
和option_value
,但不提供id
或id
+ option_name
。
在这种情况下,REPLACE的工作方式与普通的INSERT完全相同,它在插入新行之前不会删除行。