sql 存在更新,不存在插入

sqlserver

一、语法mysql

if exists (select * from users where name='张三')
	print 1
ELSE
	print 0

二、建表语句web

CREATE TABLE [dbo].[users] (
[id] int NOT NULL IDENTITY(1,1) ,
[name] varchar(50) NULL ,
[sex] varchar(5) NULL 
)
GO
SET IDENTITY_INSERT [dbo].[users] ON
GO
INSERT INTO [dbo].[users] ([id], [name], [sex]) VALUES (N'1', N'李四', N'女');
INSERT INTO [dbo].[users] ([id], [name], [sex]) VALUES (N'2', N'张三', N'女');
INSERT INTO [dbo].[users] ([id], [name], [sex]) VALUES (N'3', N'王五', N'男');

三、例子,存在更新,不存在插入sql

if exists (select * from dbo.users s where s.name='张三')
	update users set sex='男' where name = '张三'
ELSE
	insert into users (name,sex) values ('张三','女')

—————————————————————————————————svg

mysql

一、语法sqlserver

replace into 表名(列名1, 列名2, ..., 列名n) VALUES (值1, 值2, ..., 值n);

二、例子ui

replace into  students (StuName, Stuid, Class) VALUES ('张三', '123456789', '1234567');

三、语句原理
replace into 语句要求被插入的表须要有已经定义的主键,该语句经过对主键进行检索判断记录是否存在,若记录存在,则对非主键属性进行更新操做;若记录不存在,则插入一条新记录。code

2019.1.7 更新:此处的更新操做指的是按新的数据覆盖该主键标识的记录,而不是针对某些列进行更新server

四、受影响的行数
当相同主键记录存在,且欲更新的数据与已存在的数据彻底相同时(即此时什么都不作),受影响的行数为 1。
当相同主键记录存在,且欲更新的数据与已存在的数据不彻底相同时(即此时会更新数据),受影响的行数为 2。
当相同主键记录不存在时,将插入一条新的记录,受影响的行数为 1。xml