我正在尝试使用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” em>表示 Point 。我能做到吗? 我可以使用 JDBC 功能来获取最后插入的ID,但是我不喜欢这样。
答案 0 :(得分:0)
似乎关系是1到1,因为您必须为每个Point创建一个新的PointAb。除非您有另一个与PintAb相关的表,否则每个Point将有一个PointAb。如果不需要两个分离的对象,则可以将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之外没有提及其他特定语言,因此我将不赘述。