方法一:

在MYSQL中有语句 insert into … on duplicate key update…
**INSERT** **INTO** **table** (id, name, age) **values** (1, 'yourname', 18) \
**ON** DUPLICATE **KEY** **UPDATE** name**=**'yourname', age**=**18;
id字段是主键或者UNIQUE索引。上述语句的作用是:
如果id = 1这条记录是不存在的,那么执行INSERT INTO语句。
如果id = 1在数据库中是存在的,那么执行UPDATE命令,此时这条语句相当于:
**UPDATE** **table** **SET** name**=**'yourname', age**=**18 **WHERE** id**=**1;
再如果 age 字段也是UNIQUE的,相当于
**UPDATE** **table** **SET** name**=**'yourname' **WHERE** id**=**1 **OR** age**=**18 **LIMIT** 1;
执行UPDATE语句的条件是INSERT语句的执行会造成唯一键的重复。
通常,应该尽量避免对带有多个唯一关键字的表使用ON DUPLICATE KEY子句。
还可以这样写:
**INSERT** **INTO** **table** (**SELECT** id, 'hisname' **as** name **FROM** **table** **WHERE** id **>=** 3) **ON** DUPLICATE **KEY** **UPDATE** name**=VALUES**(name);

这种方法还可以用来批量执行UPDATE操作(因为单条UPDATE语句只能执行一种update操作)

方法二:

创建存储过程
CREATE PROCEDURE name()
if exists(select 1 fromwhere ID = @ID)
begin
UPDATESET XX= XX WHERE ID = @ID
end
else
begin
INSERTVALUES(XX…) end

方法三:

使用 if not exists或者where not exists
INSERT INTO table
SELECT id + 10 as id, name
FROM table
WHERE NOT EXISTS (
SELECT * FROM t WHERE id = 10
)
AND id = 27;
WHERE (NOT) EXISTS也是一种根据WHERE条件进行过滤数据的操作,它可以跟一个子查询然后返回查询结果是否为空 。在给定条件下可以返回一个空的子查询,使得插入的INSERT INTO语句接的SELECT子句返回的是一个空的结果 。