mysql - MySQL 重复行

标签 mysql sql

嘿,我正在使用这样的查询:

INSERT INTO likes( 
         likes_memory_id, 
         likes_comment_id, 
         likes_owner_id, 
         likes_like
 ) VALUES (
         :likes_memory_id, 
         :likes_comment_id, 
         :likes_owner_id, 
         :likes_like)

每当用户单击“like”按钮时,此查询都会添加一个新行。所以这个查询允许多次点赞。为了防止这种情况,我可以使用 select 语句,并且我可能会在两个查询中成功,但我确信有更好的方法来做到这一点。 (我研究了 if notists 语句,但我不太了解)如何避免多次点赞?

最佳答案

最简单的是在您想要唯一的列上创建唯一索引;

CREATE UNIQUE INDEX uq_mem_own ON likes(
 likes_memory_id, likes_owner_id
);

...并使用 INSERT IGNORE 插入,如果索引没有阻止,它将插入该值,否则忽略它;

INSERT IGNORE INTO likes( 
 likes_memory_id, 
 likes_owner_id, 
 likes_like
 ) VALUES (
 :likes_memory_id, 
 :likes_owner_id, 
 :likes_like)

关于mysql - MySQL 重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23967252/

相关文章:

mysql - 使用 appsettings.json 文件时 Serilog.Sinks.MySQL 的配置

sql - 此平面文件结构需要 MySQL DDL,提供示例 : input columns, 数据、输出表/列等

java-mysql数据检索问题

mysql - 如何根据两个不同的列计算列?

mysql - SQL复制并保存为JSON格式

sql - 消息 8115,级别 16,状态 2,第 2 行算术溢出错误将表达式转换为数据类型 int

mysql - 统计MySql中每个键类型的平均值

sql - 在 SQL Server 2008 中使用 xml 和存储过程将数据插入到表中

.net - 在程序中使用 SQL 数据库的要求

mysql - 选择用户未观看的所有电影并将结果限制为 20