Триггер INSERT SQL несколько данных - PullRequest
0 голосов
/ 13 декабря 2018

Я пытаюсь создать триггер с помощью 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
);

проблема заключается в том, что мне нужно указать "X" и "Y" для PointAbs и "Имя" для Точка одновременно.Как я могу этого достичь?Я мог бы использовать функцию JDBC , чтобы получить последний вставленный идентификатор, но мне это не нравится.

1 Ответ

0 голосов
/ 13 декабря 2018

Кажется, что отношение 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, я не буду вдаваться в подробности.

...