对重复的密钥进行更新和插入

时间:2018-09-28 23:05:10

标签: sql mariadb

我有一个带有1个唯一键(类型,颜色)的表,但是我想查询一下,如果我要插入重复的键,例如,键入:type_one |颜色:红色,已经有一行,我想更新已经存在但仍要插入的行。

enter image description here

我想更新现有行并继续插入新行。

示例

enter image description here

查询

INSERT INTO `table` (`type`, `color`) VALUES ('type_one', 'red') ON DUPLICATED KEY `color` = NULL ... **CONTINUE INSERT**

enter image description here

2 个答案:

答案 0 :(得分:0)

我认为这可以帮助您(希望):

create proc checkingduplicate
    (@color varchar(12),@typeone varchar(10))
    as
    if exists (select type, color ,count(*) from 
    yourtable
    group by type,color
    having count(*)>1 and color=@color and type=@typeone)
    update yourtable set color=null where color in (select  color  from 
    yourtable
    group by type,color
    having count(*)>1 and color=@color and type=@typeone )
    insert into yourtable (type, color) values(@color,@typeone)
    else
    insert into yourtable (type, color) values(@color,@typeone) 

go
exec 'red','type_one'

答案 1 :(得分:0)

将其设置为PK:PRIMARY KEY(type, color),这将强制color成为NOT NULL,或者您还是应该这样做。

然后,将NULLs存储为彩色,而不是将""存储为彩色。

这仍然使应用程序有一个问题,即“类型但无颜色”是否有意义。