gpt4 book ai didi

php - 使用 mysql 只插入一次行(在一个查询中)

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

我有3张 table

series
Id, Series_Id, Name, etc
genres
Id, Name
series_genre
Series_Id, Genre_Id

现在我的问题是我想使用系列和流派的唯一标识符将系列的流派存储在 series_genre 中,例如

INSERT INTO series_genre (Series_Id, Genre_Id) VALUES (1, 13)

现在我希望能够仅在该行尚不存在时添加新行(以防止重复)。我试图在一个查询中做到这一点,但无法弄清楚,因为一个系列应该能够有多个流派分配,所以 series_genre 中的 Series_Id 和 Genre_Id 不能是唯一标识符。

总而言之,我的问题是:如果不存在具有相同值的行,如何在一个查询中只插入一行!?提前致谢!

最佳答案

首先,让数据库验证数据,因此创建一个唯一约束/索引:

CREATE UNIQUE INDEX unq_series_genre_2 ON series_genre(series_id, genre_id);

然后为了忽略重复项,我建议ON DUPLICATE KEY UPDATE:

INSERT INTO series_genre (Series_Id, Genre_Id)
VALUES (1, 13)
ON DUPLICATE KEY UPDATE Series_Id = VALUES(Series_Id);

为什么我更喜欢这个而不是 INSERT IGNORE?有两个原因。首先,没有性能损失,因为记录实际上并没有改变。 (当更新不更改数据时,这非常重要,但并非在所有数据库中都是如此。)

其次,这专门只在发生唯一键违规时忽略错误。 INSERT IGNORE 可以忽略您可能想要捕获的其他错误。

关于php - 使用 mysql 只插入一次行(在一个查询中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48841305/

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