Пожалуйста, может ли кто-нибудь помочь мне создать триггер в mysql, который имеет ту же функцию, что и приведенное ниже утверждение?

#mysql #database #triggers #assertion

Вопрос:

Поэтому в основном я хочу создать триггер для базы данных mysql, который имеет ту же/аналогичную функцию с приведенным ниже кодом утверждения (поскольку mysql не поддерживает утверждение).

Вот код утверждения, который я хочу воспроизвести с помощью триггера

 CREATE ASSERTION assert
CHECK NOT EXISTS(SELECT * FROM paper P WHERE 3 <>(SELECT COUNT(*)
    FROM review R
    WHERE R.paperid = P.paperid)
);

CREATE ASSERTION atmostfivepapers
CHECK NOT EXISTS(SELECT * FROM pcmember P WHERE 5 <
    ( SELECT *
    FROM review R
    WHERE R.email = P.email
    )
);
 

А вот и мой столик

 CREATE TABLE paper(
    paperid INT UNSIGNED NOT NULL AUTO_INCREMENT,
    title VARCHAR(50) NOT NULL,
    abstract VARCHAR(250),
    pdf VARCHAR(100),
    PRIMARY KEY(paperid)
);

CREATE TABLE author(
    email VARCHAR(100) NOT NULL,
    name VARCHAR(50),
    affiliation VARCHAR(100),
    PRIMARY KEY(email)
);

CREATE TABLE writePaper(
    paperid INT UNSIGNED NOT NULL AUTO_INCREMENT,
    email VARCHAR(100),
    paper_order INT,
    PRIMARY KEY(paperid, email),
    FOREIGN KEY(paperid) REFERENCES paper(paperid),
    FOREIGN KEY(email) REFERENCES author(email)
);

CREATE TABLE pcmember(
    email VARCHAR(100) NOT NULL,
    name VARCHAR(20),
    PRIMARY KEY(email)
);

CREATE TABLE review(
    reportid INT UNSIGNED,
    sdate DATE,
    comment VARCHAR(250),
    recommendation CHAR(1),
    paperid INT UNSIGNED,
    email VARCHAR(100),
    PRIMARY KEY(paperid, email),
    FOREIGN KEY(paperid) REFERENCES paper(paperid),
    FOREIGN KEY(email) REFERENCES pcmember(email)
);
 

Заранее спасибо

Комментарии:

1. Вы хотите создать триггер для дублирования вашей таблицы?

2. да, я хочу его продублировать

3. просто скажите мне конкретную таблицу, которую вы хотите дублировать, и укажите ее атрибуты.

Ответ №1:

Сначала создайте другую таблицу, реплицирующую столбцы и их функции. После этого создайте триггер.

   CREATE TRIGGER afterInsert_trigger on yourMainTableName
  FOR INSERT
  AS
  INSERT INTO yourTableCopy(column1ofYourReplicateTable, column2OFyourReplicateTable, ... etc)
  SELECT column1ofYourMainTable, column2ofYourMainTable, ..., etc
  
  FROM INSERTED
 

Это то, что я использую в Microsoft SQL server