2016-05-12 20 views
-1

これは、MySQLのドキュメントへのリンクだけでなく、これを使用する方法の例がたくさんあります。残念ながら、私はまだ実際にどのように動作するかを明確にする必要があります。例えばMySQL INSERT ... OR UPDATE説明

、以下のテーブル構造(SQLコードは)私はINSERT ... OR UPDATEを使用するために必要なものの一例である。

CREATE TABLE IF NOT EXISTS `occt_category` (
    `category_id` int(11) NOT NULL, 
    `image` varchar(255) DEFAULT NULL, 
    `parent_id` int(11) NOT NULL DEFAULT '0', 
    `top` tinyint(1) NOT NULL, 
    `column` int(3) NOT NULL, 
    `sort_order` int(3) NOT NULL DEFAULT '0', 
    `status` tinyint(1) NOT NULL, 
    `date_added` datetime NOT NULL DEFAULT '0000-00-00 00:00:00', 
    `date_modified` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' 
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8; 
ALTER TABLE `occt_category` ADD PRIMARY KEY (`category_id`); 
ALTER TABLE `occt_category` MODIFY `category_id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=0; 

私はこの混乱に挿入しようとしていますどのような新機能ですカテゴリをAPIソースから取得して、間違いなく重複があるようにします。私はAPIから取得しています何

は次のとおりです。

[ 
    { 
    "categoryID": 81, 
    "name": "3/4 Sleeve", 
    "url": "3-4sleeve", 
    "image": "Images/Categories/81_fm.jpg" 
    } 
] 

したがって、上記の情報与えられました。 APIからの重複をチェックするためにテーブル構造を変更する必要がありますか?

MSSQLでは、単にIF EXISTS ....文を実行して重複をチェックします。残念ながら、これはMySQLです:(。

答えて

1

INSERT ... ON DUPLICATE KEY UPDATEのMySQL構文(これは私の質問から理解していただきたいところですが、INSERT ... OR UPDATEは実際のMySQLコマンドではありません)を使用する場合は、現在のテーブル構造は問題ありません

この方法は、テーブルに新しいレコードを書き込む前に、まずMySQL DBがPRIMARYに値を持つレコードがあるかどうかをチェックしますまたはUNIQUEキーフィールド(あなたの場合はcategory_id)が入っているレコードの対応するフィールドと同じ値であれば、新しいレコードを作成するのではなく、単純にそのレコードを更新します。

この構文の詳細については、hereを参照してください。

+0

ok、....ありがとう。 –