根据2列替换

时间:2013-09-01 23:35:09

标签: mysql

我有一个表格,我想根据2列替换数据。

我的查询目前看起来像这样:

$query = "REPLACE INTO `".$database."`.`".$table_extras."` (`id`, `multiverseid`, `rulings`, `printings`, `foreignNames`) ";
$query .= "VALUES (".$cardCount.",
    ".$multiverseid.",
    '".addslashes($rulings)."',
    '".addslashes($printings)."',
    '".addslashes($foreignNames)."');";

目前,通过上述查询,可以根据“id”替换内容。我如何才能使它基于'id'和'multiverseid'进行替换?

当我创建表格时,它看起来如下:

CREATE TABLE IF NOT EXISTS `extras` (
  `id` int(10) unsigned NOT NULL,
  `multiverseid` int(10) unsigned NOT NULL,
  `number` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
  `rulings` text COLLATE utf8_unicode_ci NOT NULL,
  `printings` text COLLATE utf8_unicode_ci NOT NULL,
  `foreignNames` text COLLATE utf8_unicode_ci NOT NULL,
  PRIMARY KEY (`id`, `number`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

3 个答案:

答案 0 :(得分:1)

idmultiverseid

上创建唯一索引
create unique index t_id_multiverseid on table_extras(id, multiverseid);

唯一的问题如下。如果id已经是唯一的或主键,则替换将继续使用它。您需要放弃此约束。

答案 1 :(得分:0)

REPLACE INTO根据主键或唯一索引替换。

在id和multiverseid上创建一个唯一索引:

create unique index table_extras_id_multiverseid on table_extras(id, multiverseid);

documentation说:

  

如果表中的旧行与PRIMARY KEY或UNIQUE索引的新行具有相同的值,则在插入新行之前删除旧行。

答案 2 :(得分:0)

听起来桌子的主键是“id”。这使得解析你的问题变得有点困难:)

也许你的实际意图是在id和multiverseid列上都有一个包含主键的表,在这种情况下你的REPLACE可以按你的要求工作。