所以MySQL的REPLACE命令(不要与字符串混淆替换功能),如果存在与所插入的数据相同的主键列代替行...MySQL的REPLACE查询有多个主键
但如果我有两个主键,并且我想同时使用这两个指定行来替换它们中的一个......我如何指定mysql使用两个键而不仅仅是一个
所以MySQL的REPLACE命令(不要与字符串混淆替换功能),如果存在与所插入的数据相同的主键列代替行...MySQL的REPLACE查询有多个主键
但如果我有两个主键,并且我想同时使用这两个指定行来替换它们中的一个......我如何指定mysql使用两个键而不仅仅是一个
它不应该使不同的是,它是相同的语法。只要确保你有两个键指定为列。例如:
REPLACE INTO `my_table` (`key1`, `key2`, `othercolumn1` /* , ... */)
VALUES ('widgets', 14, 'Blue widget with purple trim');
编辑
这里是我的测试,我在我的测试数据库运行,以确保我是不是要破坏你的数据。当然,如果你不确定,我鼓励你尝试一下!
CREATE SCHEMA `my_testdb`;
USE `my_testdb`;
CREATE TABLE `my_table` (
`key1` VARCHAR(20) NOT NULL,
`key2` INTEGER NOT NULL,
`othercolumn1` VARCHAR(50),
CONSTRAINT PRIMARY KEY (`key1`, `key2`));
REPLACE INTO `my_table` (`key1`, `key2`, `othercolumn1`)
VALUES ('widgets', 14, 'Green widget with fuchsia trim');
REPLACE INTO `my_table` (`key1`, `key2`, `othercolumn1`)
VALUES ('widgets', 15, 'Yellow widget with orange trim');
REPLACE INTO `my_table` (`key1`, `key2`, `othercolumn1`)
VALUES ('thingamabobs', 14, 'Red widget with brown trim');
REPLACE INTO `my_table` (`key1`, `key2`, `othercolumn1`)
VALUES ('widgets', 14, 'Blue widget with purple trim');
SELECT * FROM `my_table`;
这是我的结果:
key1 key2 othercolumn1
widgets 14 Blue widget with purple trim
widgets 15 Yellow widget with orange trim
thingamabobs 14 Red widget with brown trim
ANOTHER编辑
我想我明白你的文档中说些什么,混乱了独特的列:
如果表con是单行可以替换多个旧行保留了多个唯一索引,并且新行为不同的唯一索引中的不同旧行重复了值。 - MySQL文档
这是指在该行你与冲突不仅与现有的主键,但与其他唯一列替换,以及一个虚构的情节。这里还有一个例子来说明这一点:
CREATE SCHEMA `my_testdb2`;
USE `my_testdb2`;
CREATE TABLE `my_table` (
`key1` VARCHAR(20) NOT NULL,
`key2` INTEGER NOT NULL,
`color` VARCHAR(20) NOT NULL UNIQUE,
`othercolumn1` VARCHAR(50),
CONSTRAINT PRIMARY KEY (`key1`, `key2`));
REPLACE INTO `my_table` (`key1`, `key2`, `color`, `othercolumn1`)
VALUES ('widgets', 14, 'green', 'Green widget with fuchsia trim');
REPLACE INTO `my_table` (`key1`, `key2`, `color`, `othercolumn1`)
VALUES ('widgets', 15, 'yellow', 'Yellow widget with orange trim');
REPLACE INTO `my_table` (`key1`, `key2`, `color`, `othercolumn1`)
VALUES ('thingamabobs', 14, 'red', 'Red widget with brown trim');
REPLACE INTO `my_table` (`key1`, `key2`, `color`, `othercolumn1`)
VALUES ('widgets', 14, 'yellow', 'Yellow widget with purple trim');
SELECT * FROM `my_table`;
注意如何最后的替换操作不仅发生冲突与(key1
,key2
)主键,第一代替,但也与第二个独特的颜色。在这种情况下,在执行最后一次REPLACE操作之前删除BOTH行,以使结果不冲突。你会只用两行结束:
key1 key2 color othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim
都与(key1
,key2
)等于(“小部件”,14)和与色列行“黄”被吹走因到与表格上的多个唯一约束冲突的新行。
希望这会有所帮助!
是真的......我的理解是,如果多个键中的任何一个都重复,REPLACE将会被替换....我想要的方式是,如果两个键都是重复的,而不仅仅是其中的一个。 ..纠正我,如果我错了 – pillarOfLight
是的,这是真的。我只是在我创建的测试数据库上运行它以确保我没有误解,并且它只替换了两列匹配的值,而不是/或。如有疑问,请旋转! –
@ user841626:我也是这样阅读文档的。尽管如此,你可能只需要测试它看看它是如何表现的。 – Flimzy
根据定义,表格只能有一个PK。你的意思是独特的钥匙? – Jason
我很确定他的意思是一个多列主键。 –
你不能有两个主键。你的意思是你有一个复合主键? – Flimzy