总结了一下MySql中更新数据的方法,满足操作要求:存在就更新不存在就插入新数据,实现这一功能有两种方法
(1) REPLACE INTO
(2) ON DUPLICATE KEY UPDATE
代码演示一下它们的用法如下:
CREATE TABLE IF NOT EXISTS `Student`(
ID INT UNSIGNED PRIMARY KEY AUTO_INCREMENT ,
Sno VARCHAR(30) NOT NULL ,-- 学号
`Name` VARCHAR(30) NOT NULL ,-- 姓名
`Sex` SMALLINT DEFAULT(0) NOT NULL ,-- 性别
`Status` SMALLINT DEFAULT(0) NOT NULL,-- 状态
Birthday DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL-- 生日
);
CREATE UNIQUE INDEX IDX_Student_Sno ON Student(Sno);
REPLACE INTO 如果发现表中已经有此行数据(根据主键或者唯一索引判断)则先删除此行数据,然后插入新的数据。 2. 否则,直接插入新数据。例如重复执行以下语句:
REPLACE INTO `Student` (`Sno`, `Name`,`Sex`,Birthday)
VALUES ('2012003', '王晓东',1,'2003-06-12');
最终查询数据表里只有一条记录。
ON DUPLICATE KEY UPDATE执行顺序先查询select,如果存在就update,不存在就insert,例如重复执行以下语句:
INSERT INTO `Student` (`Sno`, `Name`,`Sex`,Birthday)
VALUES ('2012004', '程方林',1,'2003-03-06')
ON DUPLICATE KEY UPDATE `Birthday` = '2003-03-06',Sex=1,`Name`='程方林';
最终查询数据表里只有一条记录。
Ignore 其实还有这么一个关键字,在 Unique 相同的记录时,不做任何更新和插入操作,忽略本条记录。这个容易理解不做特殊说明。
DUPLICATE KEY和REPLACE INTO的应用场景到这里十分清楚了,一个是存在先删除再插入,一个是先判断存在就更新不存在就是插入。这里我推荐使用ON DUPLICATE KEY UPDATE,因为如果表中有其它额外的索引删除操作会涉及到重建过程,使用更新操作可灵活排除掉字段。
原创作品禁止转载!