我正在给Apache Derby,也就是JavaDB.在插入可能已存在的记录时,我似乎无法解决重复的关键问题.是否有相当于" insert if not exists
"或" merge
" 的Derby ?
同样,有没有办法做" drop table foo if exists
" 这样的事情?
我从未使用过apache derby,但是一个与数据库无关的通用解决方案如下:
要将值'a'和'b'插入到表foo中(使用名为A,B的列),但仅在值尚未存在的位置插入,请尝试类似
INSERT INTO foo ( SELECT 'a' as A, 'b' as B FROM foo WHERE A = 'a' AND B = 'b' HAVING count(*)=0 )
这可能需要针对特定的dbms进行调整,但是想法是插入一个select的结果,该结果仅在存在non时才返回值.
这是一个有用的技巧,用于创建一个幂等的sql脚本(第二次运行时不会执行任何操作).但是,在生产代码中使用它时要小心,因为HAVING count(*)=0
在大型表上可能会非常慢.