Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在缺少密钥的情况下在mysql中插入记录_Mysql_Sql_Sql Insert - Fatal编程技术网

如何在缺少密钥的情况下在mysql中插入记录

如何在缺少密钥的情况下在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一样,余额为金额+上一

我有一张这样的桌子:

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;