不存在的MySQL多插入查询

标签 mysql sql entity-relationship

更新并回答感谢@ypercube

答案在下面,我冒昧地发布了它,因为它出现在我的 PHP 中有一个帮助程序,我正在使用 PDO

    INSERT INTO `users_relationship` (`profile_1_id`, `profile_2_id` ,`request_date`,`auth_token`,`status`, `updated`, `deleted`)
    VALUES
        (:uid, :fid, '$now', '$fToken', 0, '$now',0),
        (:fid, :uid, '$now', '$fToken', 0, '$now',0)
    ON DUPLICATE KEY UPDATE request_date = VALUES(request_date), auth_token = VALUES(auth_token), updated = VALUES(updated), deleted = VALUES (deleted);

我有一个令我困惑的 MySQL 查询,要求是我需要一次在表中创建行,但是这些行可能已经存在,所以我需要更新一些列在此行中,而不是插入重复项。

例子

Justin (2) 与 Ben (5) 相关,然后通过更新数据库中 profile_1_id 为 2 或 5 的行并在删除的列中插入标志来终止关系。然后 Ben 尝试重新建立关系,因此我们需要再次更新行并删除已删除的标志并更新 request_date、auth_token 并更新为新值。

我写了以下内容,但没有触发错误:

Duplicate column name '2012-09-05 10:13:06'

INSERT INTO `users_relationship` (`profile_1_id`, `profile_2_id`,`request_date`,`auth_token`,`status`, `updated`, `deleted`)
    SELECT * FROM 
        (SELECT 2, 5, '2012-09-05 10:13:06', 'SQLTEST', 0, '2012-09-05 10:13:06', 0) AS faTmp,
        (SELECT 5, 2, '2012-09-05 10:13:06', 'SQLTEST', 0, '2012-09-05 10:13:06', 0) AS fTmp
    WHERE NOT EXISTS 
        (SELECT  * FROM `users_relationship`WHERE `profile_1_id`=2 AND `profile_2_id` =5) OR 
        (SELECT  * FROM `users_relationship`WHERE `profile_1_id`=5 AND `profile_2_id` =2) LIMIT 1

我走在正确的道路上还是有更好的方法?

谢谢

贾斯汀

最佳答案

最好的方法似乎是在 (profile_1_id, profile_2_id) 上添加一个 UNIQUE 约束,然后使用:

INSERT INTO `users_relationship` 
  (`profile_1_id`, `profile_2_id`
  ,`request_date`,`auth_token`,`status`, `updated`, `deleted`)
VALUES
  (2, 5, '2012-09-05 10:13:06', 'SQLTEST', 0, '2012-09-05 10:13:06', 0),
  (5, 2, '2012-09-05 10:13:06', 'SQLTEST', 0, '2012-09-05 10:13:06', 0) 
ON DUPLICATE KEY UPDATE
  request_date = VALUES(request_date)          --- what you want to happen
, auth_token = VALUES(auth_token)              --- when rows exist
  --- ; 

关于不存在的MySQL多插入查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12278941/

相关文章:

java - 比较哈希结果总是返回 false,即使它们完全相同

php - SQL查询不返回计数值

database - 将三元关系映射到关系模型(员工、客户、项目)

mysql - SQL 中基于 bool 实体的关系(图 TableView )

java - 从现有的 MySQL 数据库生成简单的 JAVA CRUD 类

mySQL 语句查找带有尾部斜杠的几乎重复的数据

sql - OrientDB 如何在一个查询中获取顶点及其边的结果集

mysql 查询耗时超过 30 秒

mysql - 多重联接的 on 子句中的未知列

database - 这两种 ER 设计之间有什么区别吗?