我在 H2 数据库中的表架构如下:
如果不存在则创建表测试( id bigint not null,name varchar(255),primary key (id) );
修改表测试如果不存在则添加约束Test_NAME UNIQUE(名称);
如果表中不存在 name 属性的值,我想通过从表中选择最新的 id 值并将其增加 1 来将其插入为“默认”。
示例: 如果 name = Default 的条目已存在,则不要插入。
ID |姓名
1 |默认
如果 name = Default 的条目不存在,则插入。
ID |姓名
1 | ABC
2 | XYZ
对于 id 列,找到最大 id 并将其加一。在本例中,插入 id=3 和 name=Default。
我的查询如下:
插入测试(id,名称) 从测试中选择 max(id) + 1,“默认” WHERE NOT EXISTS (SELECT * FROM Test where name='Default');
但是,它给了我一个错误: 列“ID”不允许为 NULL; SQL语句 因为它在内部 select 语句上应用了 where 条件。
我也尝试过: 合并到测试键(名称)值(从测试中选择 MAX(id) + 1,“默认”);
它给出了一个错误,因为合并尝试使用新值进行更新。 如果找到“默认”,它将使用新 id 更新该行,从而导致主键冲突。
有更好的方法吗?我怎样才能使查询工作?
最佳答案
你把这个问题搞得太复杂了。将 id
字段定义为 auto increment并在 name
字段上放置唯一索引。唯一索引可以防止插入重复的名称,而如果插入成功,自动增量会将 id 字段的值增加 1(默认情况下)。
关于mysql - 如果从同一个表中选择不存在如何插入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46507827/