mysql - 请,有人可以帮我在mysql中创建一个与下面的断言具有相同功能的触发器吗?
问题描述
所以基本上我想为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)
);
提前致谢
解决方案
首先创建另一个表来复制列及其特征。此后创建触发器。
CREATE TRIGGER afterInsert_trigger on yourMainTableName
FOR INSERT
AS
INSERT INTO yourTableCopy(column1ofYourReplicateTable, column2OFyourReplicateTable, ... etc)
SELECT column1ofYourMainTable, column2ofYourMainTable, ..., etc
FROM INSERTED
这就是我在 Microsoft SQL Server 中使用的
推荐阅读
- next.js - getStaticProps 页面末尾的 _NEXT_DATA_ json 对象对 SEO 的影响
- entity-framework - 将项目添加到多对多关系.net核心时出现问题
- python - 如何改进 pytesseract 参数以正常工作
- javascript - 为什么 CircleType 建立的圈子需要两次重新加载才能工作?
- ios - 如何使用可编码映射 json 数据并填充到表视图?
- c# - 在一个环境中显示连接字符串,但在另一个环境中隐藏它
- c# - 在 C# DateTimePicker 中覆盖 onPaint - 我还需要做其他事情吗?
- html - 如何使用css将顶部内阴影应用于身体
- ios - IOS 脚本 info.plist 不存在
- vaadin - Vaadin:在 Vaadin 8 中将枚举值绑定到字符串