大家好,提前谢谢大家:
我有几个关系非常复杂的表,需要用户输入一些信息。理想情况下,我想提示用户输入,但我没有找到像在 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
我也尝试过在设置变量之前声明它,但它也失败了。我也尝试过将其作为事务运行,但也不起作用。我也尝试过不带@声明变量。
你知道我的语法有什么问题吗?我在文档中找不到答案。
您可以选择一个值到变量中:
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;