1

每次在我的表上运行插入时,我都想避免重复。如果唯一链接已保存,则应更新该行。在这种情况下可以使用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
4

3 回答 3

3

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

于 2012-08-02T21:15:27.547 回答
1

'link' 列必须定义为主键或唯一键,以使 'Insert .. on duplicate key update' 语法正常工作。

执行“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?

于 2012-08-02T21:16:12.337 回答
0

你可以写一个存储过程

proc_insert_or_update(var1,var2,varN,链接)

如果链接存在 UPDATE 查询 ELSE INSERT 查询

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

于 2012-08-02T21:15:16.393 回答