gpt4 book ai didi

具有多个主键的mysql REPLACE查询

转载 作者:可可西里 更新时间:2023-11-01 07:05:38 24 4
gpt4 key购买 nike

所以如果存在与插入数据具有相同主键的列,则 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

另一个编辑

我想我在文档中看到了您在谈论什么,对唯一列的混淆:

It is possible for a single row to replace more than one old row if the table contains multiple unique indexes and the new row duplicates values for different old rows in different unique indexes. —MySQL Documentation

这是指一种相当人为的情况,在这种情况下,您要替换的行不仅与现有主键冲突,而且与其他唯一列冲突。这是说明这一点的另一个例子:

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`;

注意最后一个 REPLACE 操作不仅与第一个 REPLACE 的 (key1, key2) 主键冲突,而且与第二个 REPLACE 的唯一颜色冲突一。在这种情况下,在执行最后一个 REPLACE 操作之前,两行都被删除,因此结果没有冲突。你最终只会得到两行:

key1          key2  color   othercolumn1
widgets 14 yellow Yellow widget with purple trim
thingamabobs 14 red Red widget with brown trim

(key1, key2) 等于 ('widgets', 14) 的行 AND 颜色为“黄色”的行' 由于新行与表上的多个唯一约束冲突而被吹走了。

希望这对您有所帮助!

关于具有多个主键的mysql REPLACE查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6671631/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com