2017-10-19 14 views
0

次の例では、 のデータがない場合にのみテーブルに挿入します。それ以外の場合は、PK違反が発生しています。 mysqlで条件付き挿入を行う方法。 mysql dbを使用しています。条件付き挿入のMySQLクエリ構文

create table if not exists visa_amt_conversion (
    last_char char(1) not null, 
    last_digit char(1) not null, 
    tran_sign char(1) not null, 
    primary key (last_char) 
); 

insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('{', '0', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('A', '1', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('B', '2', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('C', '3', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('D', '4', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('E', '5', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('F', '6', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('G', '7', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('H', '8', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('I', '9', '+'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('}', '0', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('J', '1', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('K', '2', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('L', '3', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('M', '4', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('N', '5', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('O', '6', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('P', '7', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('Q', '8', '-'); 
insert into visa_amt_conversion (last_char, last_digit, tran_sign) VALUES ('R', '9', '-'); 
+0

'into into ingnore .... ' – bassxzero

+1

ありがとうございましたinsert ignore into ....私はそれを正しい答えとしてマークすることができますので、答えとして追加してください。 – Satya

答えて

3

これを行うための標準的な方法のようなものです:

insert into visa_amt_conversion (last_char, last_digit, tran_sign) 
    VALUES ('{', '0', '+') 
    on duplicate key update last_char = values(last_char); 

試行が一意キ​​ーまたは主キー制約に違反する値を挿入するためになされた場合、その行が代わりに更新されます。 last_char = values(last_char))はノーオペレーションです。値は変更されないため、行は更新されません。

短い構文:

insert ignore into visa_amt_conversion (last_char, last_digit, tran_sign) 
    VALUES ('{', '0', '+'); 

、この場合で同じことを行います。ただし、すべてのエラーを無視するため、お勧めしません。無視したい特定のエラーだけを無視するので、最初のバージョンを使用する方が良いです。

0

select count(last_char) from visa_amt_conversion;

について

そのクエリが0を返す場合、テーブルは空です。エラーが発生した場合、テーブルは存在しません。

+0

テーブルが存在するかどうかをチェックする方法はありますか?存在しないテーブルをクエリするとエラーが発生する –

+0

@RaymondNijland true、それを編集するだけです。前回私はそれをpgデータベースに入れてみました。 – alseether