如果不存在则插入否则更新记录

时间:2016-07-27 20:39:23

标签: mysql

有人可以帮我写一个查询吗?我将使用python脚本源文件每天将数据插入MySQL数据库,该文件将包含迄今为止的记录。但是,我只想插入那些新的并且尚未插入的记录。但是,如果已为这些记录更新了非主键列,那么我想更新现有记录。

要求: 1.插入新记录。 2.如果存在记录(对于PK),则不添加记录。 3.如果存在记录(对于PK)但更改了非主键,则更新现有记录(对于PK)。

CREATE TABLE `S_account` (
  `Sub` varchar(45) DEFAULT NULL,
  `AccName` varchar(45) DEFAULT NULL,
  `AccTeam` varchar(45) DEFAULT NULL,
  `Terr` varchar(45) DEFAULT NULL,
  `AccOwner` varchar(45) DEFAULT NULL,
  `Level1` varchar(45) DEFAULT NULL,
  `GAccount` varchar(45) DEFAULT NULL,
  `Customer` varchar(45) DEFAULT NULL,
  `City` varchar(45) DEFAULT NULL,
  `State` varchar(45) DEFAULT NULL,
  `EndCus` varchar(45) DEFAULT NULL,
  `AccID` varchar(45) NOT NULL,
  PRIMARY KEY (`AccID`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1 个答案:

答案 0 :(得分:1)

以下查询为我完成了这项工作。我不得不从更新中删除AccID,因为那是PK,不应该更新。

INSERT INTO S_account(
    Sub, AccName, AccTeam, Terr, AccOwner, Level1, GAccount, Customer,
    City, State, EndCusName, AccID
) VALUES (
    "test", "test", "test", "test", "test", "No", "Yes",
    "test", "test", "test", "asdasdas"
)
ON DUPLICATE KEY UPDATE
    Sub = VALUES(Sub), AccName = VALUES(AccName), AccTeam = VALUES(AccTeam),
    Terr = VALUES(Terr), AccOwner = VALUES(AccOwner),
    Level1 = VALUES(Level1), GAccount = VALUES(GAccount),
    Customer = VALUES(Customer), City = VALUES(City),
    State = VALUES(State), EndCusName = VALUES(EndCusName)