【问题标题】:MariaDB Multiple Row Insert OrderMariaDB 多行插入顺序
【发布时间】:2018-12-02 15:10:44
【问题描述】:

请考虑以下查询 -

DELIMITER $
BEGIN NOT ATOMIC

IF (Select count(*) from t1 where name = 'test') = 0 THEN
    INSERT into t1(categoryId,name, language)
    values
        (NextVal(categorySequence),'test','en-US'),
        (LastVal(categorySequence),'test','de-DE');
END IF ;
END $
DELIMITER ;

我想插入 2 条具有相同“categoryId”的记录。要生成 categoryId,我使用 mariadb 序列https://mariadb.com/kb/en/library/sequence-overview/。 NextVal() 返回下一个序列号,LastVal() 返回最后一个序列号(与 NextVal() 函数相同)。如果 INSERT 语句顺序从左到右(我在测试中找到),则上述查询工作正常。示例:“insert into x values('1'), ('2')”。 '1' 将首先插入'2',但我不确定 mariadb 是否会始终遵循此顺序。请帮助我了解 INSERT 订单或建议我一些不同的查询。

【问题讨论】:

  • 这有什么关系?什么是主键?
  • 主键是 categoryId + 语言(复合键)-插入语句中缺少语言列。 INSERT into t1(categoryId,name,language) values(NextVal(categorySequence),'test','en-US'), (LastVal(categorySequence),'test','de-DE');
  • 那么问题是什么?您是否担心LastVal() 可能会在NextVal() 之前执行?
  • 是的,没错。我担心你上面提到的“LastVal() 可能在 NextVal() 之前执行”。

标签: mysql mariadb


【解决方案1】:

没关系。 MariaDB 确保每个插入使用不同的序列值。

你为什么这么关心哪个先被执行?如果确实需要确保特定的插入顺序,那么执行两个单独的插入 SQL 语句。

【讨论】:

    猜你喜欢
    • 2018-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-05
    相关资源
    最近更新 更多