MySQL 5.7中REPLACE语句怎么用
REPLACE类似INSERT,会以主键或唯一索引为条件,如果插入行的主键或唯一键在表中已经存在,旧的记录会被更新;如果插入行的主键或唯一键在表中不存在,会插入这一条记录。REPLACE是MySQL对SQL标准的扩展。
示例①,第二条记录由于和第一条记录的主键相同,第一条记录会被更新
CREATETABLEtest(idINTUNSIGNEDNOTNULLAUTO_INCREMENT,dataVARCHAR(64)DEFAULTNULL,tsTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,PRIMARYKEY(id));
mysql>REPLACEINTOtestVALUES(1,'Old','2014-08-2018:47:00');QueryOK,1rowaffected(0.04sec)mysql>REPLACEINTOtestVALUES(1,'New','2014-08-2018:47:42');QueryOK,2rowsaffected(0.04sec)mysql>SELECT*FROMtest;
+----+------+---------------------+|id|data|ts|+----+------+---------------------+|1|New|2014-08-2018:47:42|+----+------+---------------------+1rowinset(0.00sec)
示例②,第二条记录的主键和第一条记录的主键不相同,会将第二条记录插入到表中,并保留第一条记录
CREATETABLEtest2(idINTUNSIGNEDNOTNULLAUTO_INCREMENT,dataVARCHAR(64)DEFAULTNULL,tsTIMESTAMPNOTNULLDEFAULTCURRENT_TIMESTAMPONUPDATECURRENT_TIMESTAMP,PRIMARYKEY(id,ts));
mysql>REPLACEINTOtest2VALUES(1,'Old','2014-08-2018:47:00');QueryOK,1rowaffected(0.05sec)mysql>REPLACEINTOtest2VALUES(1,'New','2014-08-2018:47:42');QueryOK,1rowaffected(0.06sec)mysql>SELECT*FROMtest2;
+----+------+---------------------+|id|data|ts|+----+------+---------------------+|1|Old|2014-08-2018:47:00||1|New|2014-08-2018:47:42|+----+------+---------------------+2rowsinset(0.00sec)