避免重复行mysql

时间:2012-08-02 21:09:02

标签: mysql

每当我在桌子上运行插入时,我都希望避免重复。如果已保存唯一链接,则应更新该行。在这种情况下可以使用ON DUPLICATE KEY UPDATE吗?我一直在尝试,但它不会起作用

    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

3 个答案:

答案 0 :(得分:3)

是的,如果要更新具有匹配唯一键的记录的值,则可以使用ON DUPLICATE KEY UPDATE。当然,这意味着您必须在桌面上拥有唯一的密钥。

答案 1 :(得分:1)

必须将“链接”列定义为主键或唯一键,才能使“插入..重复键更新”语法正常工作。

执行'Describe TableName'语句以打印出表及其键的描述。


现在您已经发布了表的架构,您可以看到该表只定义了一个键,即id列的键。

你可以这样做:

alter table drivers_cat_copy 添加唯一索引link_uniq_index(link(1054));

然而,它不会非常有效。您应该查看此问题的第一个答案,以获得更好的解决方案:MySQL: How to alter varchar(255) UNIQUE column to UNIQUE Text NOT NULL?

答案 2 :(得分:0)

您可以编写存储过程

proc_insert_or_update(var1,var2,varN,link)

如果链接存在   更新查询 其他   INSERT查询

http://dev.mysql.com/doc/refman/5.0/en/create-procedure.html