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

「Insert .. on duplicate key update」構文が正しく機能するためには、「link」列を主キーまたは一意キーとして定義する必要があります。

「Describe TableName」ステートメントを実行して、テーブルの説明とそのキーを出力します。


テーブルのスキーマを送信したので、テーブルには id 列のキーが 1 つだけ定義されていることがわかります。

あなたはこれを行うことができます:

alter table drivers_cat_copy add unique index 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 に答える