如何在缺少密钥的情况下在mysql中插入记录
我有一张这样的桌子: id ctr A 1 我想插入一行id a并将ctr更新为2 ctr的新值为2,是基于之前增加1的值。 这张桌子看起来像这样 id ctr A 1 A 2 现在我想插入id B的另一行。但是由于B在表中不存在,它将有一个初始化为1的计数器。因此,该表将如下所示 有没有一种方法可以在一条sql语句中实现这一点?我更喜欢mysql 非常感谢 编辑: 实际上这张桌子很简单。实际的表如下所示: id ctr A 1 与ctr一样,余额为金额+上一个余额。 这是所有插入,没有更新。如何在缺少密钥的情况下在mysql中插入记录,mysql,sql,sql-insert,Mysql,Sql,Sql Insert,我有一张这样的桌子: id ctr A 1 我想插入一行id a并将ctr更新为2 ctr的新值为2,是基于之前增加1的值。 这张桌子看起来像这样 id ctr A 1 A 2 现在我想插入id B的另一行。但是由于B在表中不存在,它将有一个初始化为1的计数器。因此,该表将如下所示 有没有一种方法可以在一条sql语句中实现这一点?我更喜欢mysql 非常感谢 编辑: 实际上这张桌子很简单。实际的表如下所示: id ctr A 1 与ctr一样,余额为金额+上一
谢谢。您可以使用ctr在id上创建主键,并设置ctr自动增量 因此,每次插入id=a的记录时,ctr将自动增加 `ctr`int11非空自动增量, ... 主键'id','ctr` 可以使用COALESCE MAXID+1,1将不存在的字母ID的INSERT语句初始化为
SET @ctr = 'B';
INSERT INTO tab
SELECT COALESCE(MAX(ID)+1,1),@ctr FROM tab WHERE ctr = @ctr
即使在这种情况下,唯一密钥也不存在,否则使用
更适合使用。您可以在一个查询中表示为:
insert into t (id, ctr)
select id, coalesce(max(ctr) + 1, 0)
from (select 'a' as id union all
select 'b' as id
) x left join
t
using (id)
group by id;
尝试使用MySQL的IF和CASE语句。我已经尝试了coalesce、ifnull和IF。余额和ctr中只有空值,没有错误。我将审理此案。
INSERT INTO ...
SELECT ... FROM ...
ON DUPLICATE KEY UPDATE ...
insert into t (id, ctr)
select id, coalesce(max(ctr) + 1, 0)
from (select 'a' as id union all
select 'b' as id
) x left join
t
using (id)
group by id;