access insert语句怎么写_SQL:不存在则 insert, 存在则 update

方法一:

在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 from 表 where ID = @ID)
begin
   UPDATE 表 SET XX= XX WHERE ID = @ID
end
else
begin
   INSERT 表 VALUES(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子句返回的是一个空的结果 。

详见

https://blog.csdn.net/tashanhongye/article/details/50069363​blog.csdn.net https://blog.csdn.net/u012686173/article/details/40352033​blog.csdn.net

方法四:

使用REPLACE INTO语句替代INSERT INTO

REPLACE的运行与INSERT很相似。只有一点例外,假如表中的一个旧记录与一个用于PRIMARY KEY或一个UNIQUE索引的新记录具有相同的值,则在新记录被插入之前,旧记录被删除 !删除 !

所以还需要你有删除数据的权限。


注意,除非表有一个PRIMARY KEY或UNIQUE索引,否则,使用一个REPLACE语句没有意义。该语句会与INSERT相同,因为没有索引被用于确定是否新行复制了其它的行。

需要注意的问题就是replace into的时候会删除老记录。如果表中有一个自增的主键,那么就要出问题了。

参考:

mysql 【sql语句】replace into用法详细说明​blog.csdn.net
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值