为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:dm8
【操作系统】:centos7
【CPU】:
【问题描述】*:
MERGE INTO create_table_test t
USING(
SELECT
99 AS bigint_f_pk,
11 AS tinyint_f,
21 AS tinyint_f_unsigned,
31 AS smallint_f,
41 AS smallint_f_unsigned,
'efgh' AS char_f
UNION ALL SELECT
1 AS bigint_f_pk,
1 AS tinyint_f,
2 AS tinyint_f_unsigned,
3 AS smallint_f,
4 AS smallint_f_unsigned,
'abcd' AS char_f
) s
ON
(1=0)
WHEN NOT MATCHED THEN
INSERT
(
t.bigint_f_pk,
t.tinyint_f,
t.tinyint_f_unsigned,
t.smallint_f,
t.smallint_f_unsigned,
t.char_f
)
VALUES
(
s.bigint_f_pk,
s.tinyint_f,
s.tinyint_f_unsigned,
s.smallint_f,
s.smallint_f_unsigned,
s.char_f
);
通过执行这个语句,预期是插入两条记录,结果只插入了第一条记录。
后来发现是因为建表里边有两个字段有唯一约束,后来插入的时候把这两个唯一约束字段指定值就可以了。
但是使用insert into插入,不指定这两个字段多条都可以插入,使用merge into 不指定唯一字段就只能插入一个
建表语句发出来看一下