条件插入的Mysql查询语法

时间:2017-10-19 14:39:36

标签: mysql sql

  

在下面的示例中,我只想在没有的情况下插入表中   否则它会给PK违规。如何在mysql中进行条件插入。请注意我使用的是mysql db。

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', '-');

2 个答案:

答案 0 :(得分: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', '+');
在这种情况下,

执行相同的操作 。但是,建议不要这样做,因为它会忽略所有错误。最好使用第一个版本,因为它只忽略您想忽略的特定错误。

答案 1 :(得分:0)

怎么样?

select count(last_char) from visa_amt_conversion;

如果该查询返回0,则表为空。如果您收到错误,表格不存在。