gpt4 book ai didi

MySQL使用 'where not exists'插入多行并且没有主键

转载 作者:行者123 更新时间:2023-11-29 07:48:32 25 4
gpt4 key购买 nike

我有一个名为“ friend ”的表,您可以在下面看到。有两列 userId 和friendId,它们都不是主键。每次我向表中插入数据时,都会添加 2 行。我希望能够在插入之前检查至少一行是否已存在,如果存在,则阻止两行插入。为了帮助可视化:

 +---------+----------+
| userId | friendId |
+---------+----------+
| 11111 | 22222 |
| 22222 | 11111 |
| 11111 | 33333 |
| 33333 | 11111 |
+---------+----------+

如果我尝试做类似的事情:

INSERT INTO friends (userId, friendId) VALUES (11111, 22222), (22222, 11111)

我希望查询不执行任何操作,因为这只会复制表的前 2 行。

如果您能帮助编写此查询,我们将不胜感激。

最佳答案

您可以使用触发器来中止重复记录的插入:

DELIMITER //
CREATE TRIGGER `tablename_abort_insert`
BEFORE INSERT ON `tablename`
FOR EACH ROW
BEGIN
DECLARE message VARCHAR(255);
IF (EXISTS(
SELECT *
FROM tablename
WHERE
(userId, friendId) IN ((new.userId, new.friendId),
(new.friendId, new.userId))
)) THEN
SET message = "Duplicated record";
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = message;
END IF;
END//

关于MySQL使用 'where not exists'插入多行并且没有主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27069069/

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