2017-09-24 11 views
1

campign_id列の同じ値を持つ行が存在しない限り、新しい行をMySQLテーブルに挿入しようとしています。この場合、行を更新したいと思います。 私のクエリは次のとおりです。次のようにMySQL ON DUPLICATE KEY UPDATE新しい行を挿入します

INSERT INTO prv_campaigns SET 
website_id = %s,account_id = %s,campaign_id = %s,campaign_name = %s,start_date = %s, 
end_date = %s,targeting_type = %s,enabled = %s,status = %s,bid_type = %s, 
default_bid = %s,min_bid = %s,max_bid = %s,budget = %s,cost = %s,ctr = %s, 
utm_codes = %s,country_codes = %s,country_targeting = %s,opt = %s, 
device_targeting = %s,language_targeting = %s,exclude_low_volume = %s 
ON DUPLICATE KEY UPDATE 
campaign_name = %s, 
start_date = %s, 
end_date = %s, 
targeting_type = %s, 
enabled = %s, 
status = %s, 
bid_type = %s, 
default_bid = %s, 
min_bid = %s, 
max_bid = %s, 
budget = %s, 
cost = %s, 
ctr = %s, 
utm_codes = %s, 
country_codes = %s, 
country_targeting = %s, 
opt = %s, 
device_targeting = %s, 
language_targeting = %s, 
exclude_low_volume 

とテーブル構造は次のとおりです。

CREATE TABLE `prv_campaigns` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `creation_date` datetime DEFAULT CURRENT_TIMESTAMP, 
    `modification_date` datetime DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, 
    `website_id` int(11) DEFAULT '0', 
    `account_id` int(11) DEFAULT NULL, 
    `campaign_id` varchar(100) NOT NULL, 
    `campaign_name` varchar(256) NOT NULL, 
    `start_date` varchar(45) DEFAULT NULL, 
    `end_date` varchar(45) DEFAULT NULL, 
    `targeting_type` varchar(45) DEFAULT NULL, 
    `enabled` varchar(45) DEFAULT NULL, 
    `status` varchar(45) DEFAULT NULL, 
    `bid_type` varchar(45) DEFAULT NULL, 
    `default_bid` varchar(45) DEFAULT NULL, 
    `min_bid` varchar(45) DEFAULT NULL, 
    `max_bid` varchar(45) DEFAULT NULL, 
    `budget` varchar(45) DEFAULT NULL, 
    `cost` varchar(45) DEFAULT NULL, 
    `ctr` varchar(45) DEFAULT NULL, 
    `utm_codes` varchar(256) DEFAULT NULL, 
    `country_codes` json DEFAULT NULL, 
    `country_targeting` varchar(45) DEFAULT NULL, 
    `opt` varchar(45) DEFAULT NULL, 
    `device_targeting` json DEFAULT NULL, 
    `language_targeting` json DEFAULT NULL, 
    `exclude_low_volume` varchar(45) DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `ndx` (`website_id`,`account_id`,`campaign_id`,`campaign_name`) 
) ENGINE=InnoDB AUTO_INCREMENT=14334 DEFAULT CHARSET=utf8$$ 

は、今私は、はっきりcampaign_idがUNIQUE KEYであることから、その後、クエリの更新部分が行われることを間違って考えていました代わりに私のデータベースで作成された新しい行...どのようにこれを修正するためのアイデア? thx

答えて

1

campaign_idは、ではありません。ユニークなキーです。これは、4つの部分から成る固有のキーの1つの要素です。 4つのは組み合わせてです。それぞれ個別にはありません。

一意にする場合は、unique (campaign_id)と宣言してください。他のフィールドを「個別に」一意にすることもできます。あなたが好きなら

あなたは、テーブルにこの制約を追加することができます。

alter table prv_campaigns add constraint unq_campaigns_campaign_id 
    unique (campaign_id); 
+0

は、私は、テーブルを変更することはできませんと仮定すると、私が提示したクエリに実装することができます解決策はありますか? –

+0

@yarivbar。 。 。あんまり。 'campaign_id'が一意でなければならない場合は、それを宣言する必要があります。 –

関連する問題