我在 H2 db 中有我的表模式,如下所示:
如果不存在则创建表测试( id bigint not null,name varchar(255), primary key (id) );
如果不存在,则更改表测试添加约束 Test_NAME UNIQUE (name);
我想通过从表中选择最新的 id 值并将其递增 1 来插入名称属性的值作为“默认”如果它在表中不存在。
示例: 如果 name = Default 的条目已经存在,则不要插入。
身份证 | 姓名
1 | 默认
如果 name = Default 的条目不存在,则插入。
身份证 | 姓名
1 | 美国广播公司
2 | XYZ
对于 id 列,找到最大 id 并将其加一。在这种情况下,插入 id=3 和 name=Default。
我的查询如下:
INSERT INTO Test (id , name) SELECT max(id) + 1, 'Default' from Test WHERE NOT EXISTS (SELECT * FROM Test where name='Default');
但是,它给了我一个错误说: NULL not allowed for column "ID"; SQL 语句,因为它在内部 select 语句上应用 where 条件。
我也试过: MERGE INTO Test KEY(name) VALUES (SELECT MAX(id) + 1 from Test, 'Default');
它给出了一个错误,因为合并尝试使用新值进行更新。如果它找到“默认”,它将使用新的 id 更新导致主键违规的行。
有一个更好的方法吗?我怎样才能使查询工作?