当前位置: 首页 > 知识库问答 >
问题:

SQL事务ELSE(如果使用SELECT)

周玺
2023-03-14

我正在尝试创建一个查询,该查询将检查它是否存在于表中,如果存在,它将添加一个到quantityQty否则它将从其他表中选择插入,在我的例子中是temp_sales

这是我到目前为止的sql。

SET 
    TRANSACTION ISOLATION LEVEL SERIALIZABLE; BEGIN TRANSACTION; IF EXISTS (
        SELECT 
            pid 
        FROM 
            temp_sales 
        WHERE 
            barcode = '4800556410652'
    ) BEGIN 
UPDATE 
    temp_sales 
SET 
    qty = qty + 1 
WHERE 
    barcode = '4800556410652' END ELSE INSERT INTO temp_sales (
        0, 
        (
            SELECT 
                products.ID, 
                products.product_sprice as price, 
                1, 
                1 * price, 
                '4800556410652', 
                '101', 
                'admin' 
            WHERE 
                barcode = '4800556410652'
        )
    ) END COMMIT TRANSACTION;

我一直在SQL Server2008中跟踪UPDATE if exists else INSERT中的stackoverflow答案,但我没有运气。

MySQL错误#104#1064-您的SQL语法有错误;查看与您的MySQL服务器版本相对应的手册,以了解第1行“transaction”附近使用的正确语法

我做错了什么?

编辑

PL:VB.NET DB:MySQL(xampp)

共有1个答案

符风畔
2023-03-14

谢谢你的评论,我的错。我关注的是SQL server查询,而不是MySQL查询。

不过,经过几次额外搜索(当然是在评论员的帮助下),以下是答案--谢谢

答:

INSERT into temp_sales (
    ID, pid, price, qty, total, barcode, 
    pos_id, teller
) 
SELECT 
    '0', 
    ID as pid, 
    products.product_sprice, 
    1, 
    products.product_sprice, 
    @barcode, 
    '101', 
    'admin' 
FROM 
    products 
WHERE 
    barcode = @barcode ON DUPLICATE KEY 
UPDATE 
    qty = qty + 1, 
    total = price * qty    
 类似资料:
  • 主要内容:事务的属性,事务执行流程在数据库中,我们将一条 SQL 语句称为一次基本的操作。将若干条 SQL 语句“打包”在一起,共同执行一个完整的任务,这就是事务。 事务( Transaction)由一次或者多次基本操作构成,或者说,事务由一条或者多条 SQL 语句构成。 事务有一个最显著的特征,就是它包含的所有 SQL 语句作为一个整体向数据库提交,只有所有的 SQL 语句都执行完成,整个事务才算成功,一旦某个 SQL 语句执行

  • 问题内容: 我从事SQL的时间不长,但是我想我知道,通过将SQL语句包装在事务中可以完成所有语句,或者没有一个完成。这是我的问题。我有一个具有lineitem集合的订单对象。订单项与order.OrderId相关。我已经验证 所有ID都已设置并且正确, 但是当我尝试保存(插入)订单时,我得到 的INSERT语句与FOREIGN KEY约束“FK_OrderItemDetail_Order”冲突。

  • 主要内容:COMMIT命令,ROLLBACK命令,SAVEPOINT命令,SET TRANSACTION命令事务是与数据库相反执行的工作单元,从数据库读取或写入数据库的任何事务。事务是对数据库的一项或多项更改的传播。 例如,如果我们创建记录、更新或删除表的历史记录,那么也应该创建事务。控制数据完整性的操作是必不可少的,它用于处理数据库的错误。我们向组中添加一些 SQL 查询并执行事务部分。 事务属性: 事务有四个属性,称为 ACID 属性 - 原子性 - 确保与工作单元的所有操作都成功完成; 否

  • 主要内容:开始和结束事务,提交事务,回滚事务,自动事务控制在本章中,我们将讨论和学习PL/SQL中的事务。 数据库事务是由一个或多个相关SQL语句组成的原子工作单元。它被称为原子操作,因为构成事务的SQL语句带来的数据库修改可以共同提交,即永久化到数据库或从数据库回滚(撤销)。 成功执行的SQL语句和提交的事务不一样。即使成功执行SQL语句,除非提交包含语句的事务,否则可以回滚该语句,并且可以撤消语句所做的所有更改。 开始和结束事务 事务有开始和结束。当

  • 在本例中,我使用Angular并希望使用(从版本4开始可用): 如何使用实现相同的行为?

  • 1. 前言 在上一小节中,我们介绍了事务的概念和基本使用,探讨了事务的四大特性,本小节我们将更加深入的学习事务。 在实际的生产环境中,偶尔会遇到大量并发访问的情况;大量的并发会导致数据的竞争,从而引起一系列的并发问题。 本小节,我们将一起学习 SQL 的4种事务隔离机制,以及与之对应的3种并发异常。 本小节测试数据如下,请先在数据库中执行,本小节的所有操作若无特殊说明默认在 MySQL 中执行。