触发INSERT SQL多个数据

时间:2018-12-13 17:06:01

标签: mysql sql triggers sql-insert

我正在尝试使用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,但是我不喜欢这样。

1 个答案:

答案 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之外没有提及其他特定语言,因此我将不赘述。

相关问题