触发INSERT SQL多个数据



我试图用sql创建一个触发器,这样当我在Point中插入一行时,我会在它之前插入PointAbs中的一行。

CREATE TABLE PointAbs (
ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
X INTEGER NOT NULL,
Y INTEGER NOT NULL
);
CREATE TABLE Point(
ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(50) ,
IDPointAbs INTEGER NOT NULL,
FOREIGN KEY (IDPointAbs) REFERENCES PointAbs(ID) ON DELETE CASCADE
);

问题是,我需要同时为PointAbs提供"X">《Y》,为Point同时提供Name">。我怎样才能做到这一点?我可以使用JDBC功能来获取最后一个insertedID,但我不喜欢这样。

似乎关系是1比1,因为您必须为每个点创建一个新的PointAbs。除非您有另一个与PintAbs相关的表,否则每个点都将有一个PointAbs。如果不需要两个分开的对象,可以将X和Y作为Point:的索引

CREATE TABLE Point(
ID INTEGER NOT NULL PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(50) ,
IDPointAbs INTEGER NOT NULL,
X INTEGER NOT NULL,
Y INTEGER NOT NULL,
INDEX INDEX_X_Y ON Point(X,Y)
);

当然,这在您的设计中可能是不可能的,也不可取。由于不能像X和Y值那样向触发器发送参数,因此最好的选择是对两个插入都使用单个事务。

BEGIN;
INSERT INTO PointAbs(X,Y) VALUES (10,15);
INSERT INTO Point(Name, IDPointAbs) VALUES ('Fancy Name', LAST_INSERT_ID(PointAbs));
COMMIT;

您可以使用系统后端的编程语言来控制插入,但由于除了mysql之外没有提到任何特定的语言,因此我不会详细介绍。

最新更新