2012-08-02 205 views
1

每當我在我的表上運行插入時,我都想避免重複。如果唯一鏈接已保存,則應更新該行。在這種情況下可以使用ON DUPLICATE KEY UPDATE?我一直在嘗試,但它不會工作避免重複行mysql

id cat_id cat_name     prod_group      link                                                                            
------ ------ ----------------------- ----------------------------- --------------------- 
    1  5 Notebooks     Alienware       /url_to/what_is/unique                                                
    10  5 Notebooks     Latitude      /url_to/what_is/unique                       
    11  3 Desktops     Alienware      /url_to/what_is/unique                      
    12  3 Desktops     Optiplex      /url_to/what_is/unique rquery=na                                      
    20  3 Desktops     Legacy-System     /url_to/what_is/unique rquery=na                     
    21  3 Desktops     Studio      /url_to/what_is/unique rquery=na                       
    22  1 Monitore und Elektronik Axim Electronic    /url_to/what_is/unique %40%2CAxim%2BElectronic&rquery=na               
    27  1 Monitore und Elektronik TV       /url_to/what_is/unique rquery=na                 
    28  2 Handys und Tablets  Tablet      /url_to/what_is/unique rquery=na                 
    29  2 Handys und Tablets  Mobile Device     /url_to/what_is/unique rquery=na             
    30  4 Drucker     Printer      /url_to/what_is/unique               
    31  6 Server und Netzwerk  Cloud Product     /url_to/what_is/unique   

我的查詢

$sql="INSERT INTO drivers_cat_copy(cat_id,cat_name,prod_group,link) 
        VALUES('$id','$name','$p','$cat_url')".      
        "ON DUPLICATE KEY UPDATE cat_id='$id',cat_name='$name',prod_group='$p',link='$cat_url'";  

表格屬性

CREATE TABLE `drivers_cat_copy` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `cat_id` int(1) DEFAULT NULL, 
    `cat_name` varchar(64) DEFAULT NULL, 
    `prod_group` varchar(64) DEFAULT NULL, 
    `link` varchar(1054) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=MyISAM AUTO_INCREMENT=77 DEFAULT CHARSET=latin1 
+0

你可以發表表架構和你說的查詢不起作用嗎? – 2012-08-02 21:13:54

+0

請發佈您嘗試過的不起作用的內容,以便我們幫助弄清楚爲什麼它失敗。 – 2012-08-02 21:15:19

+0

好了一分鐘 – lgt 2012-08-02 21:16:40

回答

3

是的,你可以,如果你想與匹配的唯一鍵的記錄更新值使用對重複密鑰更新。當然,這意味着你必須在桌面上擁有唯一的鍵。

1

'鏈接'列必須定義爲主鍵或唯一鍵才能使'插入..重複鍵更新'語法正常工作。

執行'Describe TableName'語句以打印表格及其關鍵字的描述。


現在你已經張貼你的表的模式,你可以看到表中只定義了一個密鑰,ID列的關鍵。

你可以這樣做:

ALTER TABLE drivers_cat_copy 添加唯一索引link_uniq_index(鏈接(1054));

但是,它不會很有效率。你應該看看這個問題的第一個答案,以獲得更好的解決方案:MySQL: How to alter varchar(255) UNIQUE column to UNIQUE Text NOT NULL?