我有table结构。
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')
一起,则只应插入第二个值。
我尝试了insert ignore(mysql特性),我为所有列创建了唯一的id。
但是有一个问题,如果值为null,那么unique不起作用。我的数据可以有空值。但这也应该是独一无二的。
我知道这是意料之中的行为。但是我怎样才能得到我所需要的功能呢?
如果两行在我的自动增量id之外有相同的数据,那么它是重复的。
更新1::对于单插入,如果“ColumnMe”为只能为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条答案
按热度按时间6rqinv9w1#
这似乎是预期的mysql行为。
请参见错误#8173:唯一索引允许使用空值的重复项(https://bugs.mysql.com/bug.php?id=8173)它被标记为非bug。
ee7vknir2#
只是为了澄清问题