gpt4 book ai didi

mysql - 在不存在的地方插入

转载 作者:行者123 更新时间:2023-11-29 04:40:53 24 4
gpt4 key购买 nike

我尝试了以下查询:

  INSERT INTO `chat_lines` (`channel`, `nick`, `value`)
VALUES ('Alfa', 'Beta', '0')
WHERE NOT EXIST
(
SELECT *
FROM `chat_lines`
WHERE `channel` = 'Alfa' AND `nick` = 'Beta'
);

如何仅在记录不存在时插入?

channel 和昵称不能唯一,因为一个 channel 可以有很多刻痕的记录一个昵称可以有多个 channel 。

类似于:

(Alfa | Alfa)
(Alfa | Beta)
(Beta | Alfa)
(Beta | Beta).

所以,我不想有两条相同的记录,比如

(Alfa|Beta)(Alfa|Beta).

或者也许有其他方法可以解决我的问题?我只想创建具有特定昵称和 channel 的记录如果它不存在,如果它存在,我想增加值(value)。

@编辑我尝试使用 REPLACE。有用。但是...我想更改 value = value + 1。而且只有在 UPDATE AFAIK 中才有可能。我能做什么?

最佳答案

如果您只想为每一对 (nick, channel) 设置一个value,请首先在这一对上创建一个唯一索引:

CREATE UNIQUE INDEX `chat_lines_by_nick_channel`
ON `chat_lines` (`nick`, `channel`);

这让您的行具有值 ('Staisy', 'nesdev')('Milo', 'nesdev')(' Milo', 'fireworks') 对于这些字段,只是不是带有 ('Milo', 'fireworks') 的两个单独的行。

然后您可以使用 ON DUPLICATE KEY UPDATE 让 MySQL 更改 value 而不是插入新行,或者 INSERT IGNORE INTO chat_lines 到当您尝试插入新行时,请保持不变。例如,如果您想将 value 加 1,您可以这样做:

INSERT INTO chat_lines (`nick`, `channel`, `lines`)
VALUES ('Chester', 'orchard', 1)
ON DUPLICATE KEY UPDATE `value` = `value` + 1

如果没有匹配 ('Chester', 'orchard') 的行,这将添加一个新行。否则,它会将 1 添加到现有行中的 value

另见:

关于mysql - 在不存在的地方插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28867436/

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