2014-09-01 268 views
0

我知道执行更新或插入的简单方法是使用'REPLACE',但它需要一个主键,在没有主键的情况下如何?MySQL更新或插入没有主键的表格

我在表5列:

  1. remark_id(自动递增的主键)
  2. USER_ID
  3. remark_user_id
  4. 此言
  5. LAST_MODIFIED

我希望检查一下user_idremark_user_id在更新备注之前先存在,否则将创建一个新行以将备注保存为user_idremark_user_id

这里是我的代码

INSERT INTO `users_remark` (`user_id`, `remark_user_id`, `remark`) 
SELECT 1,3 ,'testing123' 
FROM dual 
WHERE NOT EXISTS 
    (SELECT * 
    FROM `users_remark` 
    WHERE `user_id` = 1 
     AND `remark_user_id` = 3) 

运行SQL后,什么也没有发生在我的数据库。没有添加或更新记录。

[编辑]

代码更改使用IF...ELSE...但它与一些语法错误的第一行

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF EXISTS (SELECT * FROM users_remark WHERE user_id' at line 1 

IF EXISTS (
    SELECT * FROM `users_remark` 
    WHERE `user_id`=1 AND `remark_user_id` = 3 
    ) 
    THEN UPDATE `users_remark` SET `remark` = 'testing123' 
      WHERE `user_id`=1 AND `remark_user_id` = 3 
ELSE 
    INSERT INTO `users_remark` SET `remark` = 'testing123', `user_id`=1, `remark_user_id` = 3 
+0

如果此查询的结果是:'SELECT * FROM users_remark WHERE user_id = 1 AND remark_user_id = 3'由于'NOT EXISTS'子句,没有任何反应是正常的。只是为了提供信息,'INSERT'语句永远不会执行'UPDATE'。 – 2014-09-01 05:19:36

+0

如何更新案例?应该如何编辑? – Simon 2014-09-01 05:21:03

+0

要在你的表上进行更新:'UPDATE users_remark SET remark ='testing123'WHERE user_id = 1 AND remark_user_id = 3' – 2014-09-01 05:24:26

回答

1

这里是既INSERTUPDATE条款(T-SQL语法查询)

IF [condition here] BEGIN 
    UPDATE `users_remark` 
    SET `remark` = 'testing123' 
    WHERE `user_id`=1 
     AND `remark_user_id` = 3 
END 
ELSE BEGIN 
    INSERT INTO `users_remark` (`user_id`, `remark_user_id`, `remark`) 
    VALUES (1, 3, 'testing123) 
END 

编辑:MySQL的句法

DECLARE @numrecords INT 

SELECT @numrecords = count(*) 
FROM `users_remark` 
WHERE `user_id` = 1 
    AND `remark_user_id` = 3 

IF @numrecords > 0 THEN 
    UPDATE `users_remark` 
    SET `remark` = 'testing123' 
    WHERE `user_id`=1 
     AND `remark_user_id` = 3 
ELSE 
    INSERT INTO `users_remark` (`user_id`, `remark_user_id`, `remark`) 
    VALUES (1, 3, 'testing123) 
END IF 

希望这将帮助你相同的查询。

+0

#1064 - 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'IF EXISTS(选择* FROM'users_remark' WHERE'user_id''at line 1处使用' – Simon 2014-09-01 06:30:10

+0

')时使用正确的语法对不起,我正在使用T- SQL和MySQL的语法有点不同。我更新了我的答案与MySQL版本 – 2014-09-01 06:36:38

+0

语法错误仍然发生... – Simon 2014-09-01 06:42:20

0

我终于尝试将代码放到php中,它工作并且更容易理解。

 $checkRemark = mysqli_query($GLOBALS['db_conn'], "SELECT * FROM `users_remark` WHERE `user_id`=".$data['uid']." AND `remark_user_id` = ".$data['ruid']); 
     if (mysqli_num_rows($checkRemark)>0){ 
      $remarkSql = "UPDATE `users_remark` 
         SET `remark` = '".$data['remark']."' 
         WHERE `user_id`=".$data['uid']." 
          AND `remark_user_id` = ".$data['ruid']; 
     } else { 
      $remarkSql = "INSERT INTO `users_remark` (`user_id`, `remark_user_id`, `remark`) 
          VALUES (".$data['uid'].", ".$data['ruid'].", '".$data['remark']."')"; 
     }