总结了一下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,因为如果表中有其它额外的索引删除操作会涉及到重建过程,使用更新操作可灵活排除掉字段。

mysql学习目录

原创作品禁止转载!