2014-09-01 65 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']."')"; 
     }