插入到MariaDB事务中带有变量的语句中

问题描述 投票:0回答:1

大家好,提前谢谢大家:

我有几个关系非常复杂的表,需要用户输入一些信息。理想情况下,我想提示用户输入,但我没有找到像在 Oracle SQL 中使用“&”那样的方法。我尝试了触发器,我尝试了带有变量的参数化输入语句,这将使事情变得易于阅读,但我是一个菜鸟,MariaDB 不断向我抛出错误,所以我不断简化事情。

我认为至少有一个交易就足以确保数据完整性,并且比要求输入的触发器更简单。现在,我在尝试插入作为变量创建的值时遇到了问题。

People.Entity_ID 将 Fiscal_Entities.Entity_ID 作为外键,因此首先我在 Fiscal_Entities 中创建行,然后尝试将最高 PK 自动增量值存储为变量,然后将其传递到下一个语句。

INSERT INTO Fiscal_Entities (Nature, Client_Status)
VALUES ('Physical', 3);
SET @New_ID = (SELECT Max(Entity_ID) + 1 FROM Fiscal_Entities);
INSERT INTO People (Entity_ID, Sex, First_Given_Name, First_Family_Name, Pupil_Status, Teacher_Status)
VALUES (@New_ID, 'F', 'Toto', 'Tito', 3, 3);

但我明白了

SQL Error [1064] [42000]: (conn=5) You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'SET @New_ID = (SELECT Max(Entity_ID) + 1 FROM Fiscal_Entities);
INSERT INTO P...' at line 3

我也尝试过在设置变量之前声明它,但它也失败了。我也尝试过将其作为事务运行,但也不起作用。我也尝试过不带@声明变量。

你知道我的语法有什么问题吗?我在文档中找不到答案。

variables mariadb set sql-insert declare
1个回答
0
投票

您可以选择一个值到变量中:

SELECT Max(Entity_ID) + 1 into @New_ID FROM Fiscal_Entities;

或者你可以考虑使用 LAST_INSERT_ID():

INSERT INTO Fiscal_Entities (Nature, Client_Status) VALUES ('Physical', 3); 

SET @New_ID = LAST_INSERT_ID(); 

INSERT INTO People (Entity_ID, Sex, First_Given_Name, First_Family_Name, Pupil_Status, Teacher_Status) SELECT @New_ID, 'F', 'Toto', 'Tito', 3, 3; 
© www.soinside.com 2019 - 2024. All rights reserved.