【问题标题】:avoid duplicate rows mysql避免重复行mysql
【发布时间】:2012-08-02 21:09:02
【问题描述】:

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

【问题讨论】:

  • 你能发布表架构和你说的查询不起作用吗?
  • 请发布您尝试过但不起作用的方法,以便我们帮助找出失败的原因。

标签: mysql


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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


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

    你可以这样做:

    更改表 drivers_cat_copy 添加唯一索引link_uniq_index(link(1054));

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

    【讨论】:

      【解决方案3】:

      你可以写一个存储过程

      proc_insert_or_update(var1, var2, varN, 链接)

      如果链接存在 更新查询 别的 插入查询

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

      【讨论】:

      • 存储过程作为 OP 的解决方案就像用火箭筒杀死蚊子一样,大材小用。
      猜你喜欢
      • 2016-05-17
      • 2015-08-09
      • 2013-06-30
      • 1970-01-01
      • 2015-04-29
      • 2015-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多