有人可以帮我写一个查询吗?我将使用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;
答案 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)