【问题标题】:MySQL if exists update values else insertMySQL 如果存在更新值,否则插入
【发布时间】:2017-09-27 14:42:26
【问题描述】:

我正在创建一个存储学生出勤率的应用程序。

我正在创建将存储此出勤率的数据库,但我被困在 mySQL 查询上。

我希望查询搜索“讲座名称”和“user_id”(来自其他数据库的外键),如果存在,则增加学生参加讲座的人数(参加人数++和总数++)

到目前为止,我有这个:

    INSERT INTO `attendance`(`attendance_id`, `module_code`, `lecture_name`, 
`attended`, `total`, `user_id`) VALUES ("null","test","TEST",1,1,1)
   ON DUPLICATE KEY UPDATE 
 attended = attended+1,total = total+1                                                                                              

这将插入一个新行,但对于 ON DUPLICATE,没有办法传递主键来检查“重复”

我想知道除了 ON DUPLICATE KEY 在 MySQL 中是否还有其他方法可以做到这一点,或者是否有人可以帮助我。

这是数据库的屏幕截图。例如,请参阅“运营研究”是在应该增加值时创建的。这是因为我无法将主键添加到 SQL 查询中。

我将不胜感激任何帮助, 谢谢。

【问题讨论】:

  • 你有什么问题?
  • 你不需要主键,任何唯一索引都会触发ON DUPLICATE KEY。您可能应该在 (module_code, lecture_name, user_id) 上有一个唯一索引

标签: php mysql sql if-statement exists


【解决方案1】:

在双引号中使用null 很麻烦。所以,我认为你应该把查询写成:

INSERT INTO `attendance`(`module_code`, `lecture_name`, `attended`, `total`, `user_id`)
    VALUES ('test', 'TEST', 1, 1, 1)
    ON DUPLICATE KEY UPDATE attended = attended + 1, total = total + 1 ;   

为此,您似乎需要(lecture_name, user_id) 上的唯一索引。

您的数据模型看起来确实可疑,因为该表在多行上重复 lecture_name。在我看来,您可能想要一个 lectures 表并在此表中使用 lecture_id。

【讨论】:

  • 我怀疑module_code 也应该在唯一索引中。
猜你喜欢
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
相关资源
最近更新 更多