我必须将旧的Paradox数据库迁移到MySql。 Paradox数据库包含具有空值的复合主键(复合键由3,4或5个字段组成,它可以有1或2个具有Null值的字段)。问题是在MySql中不允许使用pk中的空值。在Paradox中直接替换空值是不可能的(在某些表中有5百万行),那么我们怎么办呢?
提前感谢您的解决方案。
答案 0 :(得分:0)
我认为你在MySQL DB中有两个选择,
(a)使用PK,需要替换空值/忽略此类行
(b)使用UNIQUE约束,它仍然允许空值,而不是PK。
对于选项(a),
我建议禁用主键约束并导入数据;然后执行所有必要的更正并重新激活主键。如果你想在可能的PK列中删除具有空值的行,你也可以使用<includeonly>[[Category:Album:{
- 关键字,它会在插入时跳过违反PK约束的行(参见primary key and unique index constraints) {{Album|Urban Hymns}}
}]]</includeonly>
选项(b),
应该允许按原样导入数据。然后,您可以进行更正或保留数据。
答案 1 :(得分:0)
假设PK中的空值意味着它们不需要是唯一的,它们可以是任何值,因此将任意值赋给空值。
为此,在MySQL表上创建一个触发器,如下所示:
delimiter //
create trigger trig_pk_col_1 before insert on mytable
for each row
begin
set new.pk_col_1 = coalesce(new.pk_col_1, 999);
set new.pk_col_2 = coalesce(new.pk_col_2, 999);
-- etc for other
end;//
delimiter ;
我选择999
作为任意非空值,但您可以选择任何内容。
如果逻辑需要更复杂,您可以根据需要对其进行编码。
另外,为简洁起见,我使用coalesce()
,但如果您愿意,可以使用更详细的if
:
if new.pk_col_1 is null then
set new.pk_col_1 = 999;
end if;
-- etc