在MY-SQL中将多个值一起插入,这些值不存在。其中" NULL"应该是独特的

时间:2018-05-23 06:56:56

标签: mysql bulkinsert

我有桌面结构。

CREATE TABLE test_duplicate_join 
(    
vendor INT,
buyside INT,
columnnme VARCHAR(32),
mappingid INT ,
columntype VARCHAR(32) 
);
ALTER TABLE test_duplicate_join ADD PRIMARY KEY(mappingId);
ALTER TABLE test_duplicate_join
MODIFY mappingId INT NOT NULL AUTO_INCREMENT;
CREATE UNIQUE INDEX idx_name_phone ON test_duplicate_join(vendor,buyside,columnnme,columntype);

INSERT INTO test_duplicate_join (vendor,buyside,columntype) 
VALUES  (0,34,'Excel'),(0,35,'A');

在此之后,如果我尝试将(0,34, 'Excel'),(1,36, 'fd')插入到一起,那么它应该只插入 2nd 值。

我尝试使用insert ignore(MYSQL功能),我为所有列创建唯一ID。

但是如果值为null,则存在问题,那么唯一不起作用。 我的数据可以包含空值。但这也应该是独一无二的。

我知道这是预期的行为。但是,我如何才能获得所需的功能?

如果两行有相同的数据,我的自动增量ID,那么它是重复的。

更新1 :: 对于单个插入,我们可以这样做,如果" columnnme"只能是null。对于其他列,我们可以放置case。如何将多个插入物组合在一起?

INSERT INTO test_duplicate_join (vendor,buyside,columnnme) SELECT 0,0,NULL 
WHERE NOT EXISTS 
    (   SELECT  1 FROM test_duplicate_join d   WHERE
    d.vendor = 0
    AND
    d.buyside = 0
    AND
    d.columnnme = (CASE WHEN ISNULL(NULL)  THEN columnnme IS NULL ELSE
                    columnnme=NULL END) ) 

2 个答案:

答案 0 :(得分:1)

只是澄清问题

-rw-rw---- 1 root root 1073742220 May 13 23:36 /var/lib/my-app/my-app.001219
-rw-rw---- 1 root root 1073742065 May 15 07:21 /var/lib/my-app/my-app.001220
-rw-rw---- 1 root root 1073742428 May 16 12:18 /var/lib/my-app/my-app.001221
-rw-rw---- 1 root root 1073741955 May 17 15:04 /var/lib/my-app/my-app.001222
-rw-rw---- 1 root root 1073742263 May 18 17:21 /var/lib/my-app/my-app.001223
-rw-rw---- 1 root root 1073742288 May 19 19:46 /var/lib/my-app/my-app.001224
-rw-rw---- 1 root root 1073741896 May 20 22:45 /var/lib/my-app/my-app.001225
-rw-rw---- 2 root root 1073742131 May 22 10:37 /var/lib/my-app/my-app.001226
-rw-rw---- 1 root root  967375006 May 23 13:37 /var/lib/my-app/my-app.001227

答案 1 :(得分:0)

这似乎是预期的 MySQL行为。

请参阅错误#8173:唯一索引允许带有空值的重复https://bugs.mysql.com/bug.php?id=8173),该标记已标记为非错误