MySQL更新或插入没有主键的表

时间:2014-09-01 05:12:51

标签: mysql

我知道执行更新或插入的简单方法是使用' REPLACE'但它需要一个主键,如果没有主键的表怎么样?

我的表格中有5列:

  1. remark_id(自动增量主键)
  2. USER_ID
  3. remark_user_id
  4. 评论
  5. LAST_MODIFIED
  6. 我希望在更新评论之前先检查user_idremark_user_id对是否存在,否则将创建一个新行以使用user_id和{{保存评论1}}。

    这是我的代码

    remark_user_id

    运行SQL后,我的数据库中没有任何反应。没有添加或更新记录。

    [编辑]

    使用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) 进行代码更改,但第一行出现了一些语法错误

    IF...ELSE...

2 个答案:

答案 0 :(得分: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

希望这会对你有所帮助。

答案 1 :(得分: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']."')";
        }