【问题标题】:MySQL 8 Transaction resulting in error for using multiple sql statementsMySQL 8 事务导致使用多个 sql 语句出错
【发布时间】:2023-01-01 20:55:29
【问题描述】:

我有 3 个表,一个名为 SKU_Data,另外两个分别名为 Fabric_Code 和 Product_Type。 SKU_Data 有 2 个外键列,一个存储 Fabric_Code 的 id,另一个存储 Product_Type 的 id。

我写了一个 SQL 事务来将数据放入 SKU_Data。 (使用 MySQL 8)

START TRANSACTION;

SELECT id INTO @fabricId FROM Fabric_Codes WHERE Fabric_Code = 'SOME_CODE';

SELECT id INTO @productTypeId FROM Product_Types WHERE Product_Type = 'SOME_TYPE';

INSERT INTO SKU_Data (Item_Sku_Code, Date_Introduced, Fabric_Id, Product_Type_Id, CP)
VALUES ('SOME_STRING_ID', '2012-04-03 14:00:45', @fabricId, @productTypeId, 41);

IF (ERROR) THEN
  ROLLBACK;
ELSE
  COMMIT;
END IF;

现在我收到下面提到的错误:

SQL Error [1064] [42000]: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SELECT id INTO @fabricId FROM Fabric_Codes WHERE Fabric_Code = 'VELVETS';

SELEC' at line 3

Error position: line: 2

这个错误太模糊无法解决,知道如何解决这个问题吗?

当我单独运行查询 SELECT id INTO @fabricId FROM Fabric_Codes WHERE Fabric_Code = 'VELVETS'; 时,它工作正常。

我尝试更改也不起作用的分隔符。

【问题讨论】:

  • 该错误声称您尝试将代码行作为 MySQL 不支持的匿名代码块执行。
  • 这个怎么解决,存储过程?你有什么建议?

标签: mysql sql mysql-8.0


【解决方案1】:

不要使用中间变量。在单个 INSERT .. SELECT 中执行您的操作(这本身就是一个事务):

INSERT INTO SKU_Data (Item_Sku_Code, Date_Introduced, Fabric_Id, Product_Type_Id, CP)
SELECT 'SOME_STRING_ID', 
       '2012-04-03 14:00:45', 
       Fabric_Codes.id, 
       Product_Types.id, 
       41
FROM Fabric_Codes 
CROSS JOIN Product_Types 
WHERE Fabric_Codes.Fabric_Code = 'SOME_CODE'
  AND Product_Types.Product_Type = 'SOME_TYPE';

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-11-04
    • 2017-08-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多