Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 需要将SQL中的属性限制为3个值_Mysql_Sql_Database_Netbeans - Fatal编程技术网

Mysql 需要将SQL中的属性限制为3个值

Mysql 需要将SQL中的属性限制为3个值,mysql,sql,database,netbeans,Mysql,Sql,Database,Netbeans,我有3个表格,分别是REVIEW、PAPER和PCMEMBER,其代码如下所述: CREATE TABLE REVIEW( due_date DATE NOT NULL, review_date DATE NOT NULL, recommendation VARCHAR(50) NOT NULL, comment VARCHAR(50) NOT NULL, pcmem_id NUMBER(10) NOT NULL, paper_id NUMBER(10) NOT NULL, CONSTRAINT

我有3个表格,分别是REVIEW、PAPER和PCMEMBER,其代码如下所述:

CREATE TABLE REVIEW(
due_date DATE NOT NULL,
review_date DATE NOT NULL,
recommendation VARCHAR(50) NOT NULL,
comment VARCHAR(50) NOT NULL,
pcmem_id NUMBER(10) NOT NULL,
paper_id NUMBER(10) NOT NULL,
CONSTRAINT review_pk PRIMARY KEY (pcmem_id,paper_id),
CONSTRAINT review_fk FOREIGN KEY(paper_id)
REFERENCES PAPER(paper_id),
CONSTRAINT review_fk1 FOREIGN KEY(pcmem_id)
REFERENCES PCMEMBER(pcmem_id));

CREATE TABLE PCMEMBER(
pcmem_id NUMBER(10) NOT NULL PRIMARY KEY,
pc_fname VARCHAR(20) NOT NULL,
pc_sname VARCHAR(20) NOT NULL,
pc_title VARCHAR (20) NOT NULL,
pc_position VARCHAR(20) NOT NULL,
affiliation VARCHAR(20) NOT NULL,
pc_email VARCHAR(20) NOT NULL,
track_id NUMBER(6) NOT NULL,
CONSTRAINT pcmember_fk FOREIGN KEY(track_id)
REFERENCES TRACK(track_id));

CREATE TABLE PAPER(
paper_id NUMBER(10) PRIMARY KEY NOT NULL,
paper_title VARCHAR(20) NOT NULL,
abstract VARCHAR(50) NOT NULL,
paper_type VARCHAR(20) NOT NULL,
submission_date DATE NOT NULL,
track_id NUMBER(6) NOT NULL,
CONSTRAINT paper_fk FOREIGN KEY(track_id)
REFERENCES TRACK(track_id),
CONSTRAINT chk_type CHECK(paper_type IN ('full paper','Research-in-Progress','posters')),
);

我试图添加一个条件,即每篇论文将由3名PC成员审核。不确定我应该使用什么检查约束?我只是需要这个来创建表。谢谢

我看到的问题是,在某些情况下,你不会有3名审稿人。当您添加三个中的第一个时,您将只有一个。您可以尝试确保您的应用程序总是一次添加三个,但这似乎比它的价值更麻烦

我的建议是通过应用程序强制执行这一点,并可能在表上为插入设置触发器,以防止添加超过三个的插入。在大多数SQL变体中,您可以通过计算列和检查约束的组合来实现这一点,但正如Gordon指出的,MySQL并不强制执行它们。

创建:

旗帜纸。默认值为0 插入/更新触发器以防止客户端更改标志 当相关论文没有恰好有三位审阅者同时更新旧的.PAPER\u id和新的.PAPER\u id时,触发审阅以自动设置取消设置PAPER.REVIEW标志 触发审阅以防止每篇论文有三名以上的审阅者。 更新

创建触发器的示例防止插入时每篇论文有3名以上的审阅者

DELIMITER //
CREATE TRIGGER `chck_pcmem` AFTER INSERT ON `review` FOR EACH ROW BEGIN
    IF ((SELECT COUNT(1) FROM review WHERE paper_id = NEW.paper_id) > 3) THEN
        SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Only 3 PC members per paper';
    END IF;
END//
DELIMITER ;

您正在MySQL中使用检查约束。你知道MySQL没有强制执行吗?嗨,戈登,是的,我知道。想知道有没有别的办法可以解决这个问题?触发器?对于paper_类型,可以使用enum或更好的FK引用paper_类型表。不完全确定-但NUMBER在MySQL中不是有效的类型。保罗,谢谢你的回复。我试图找出上面的触发器语句。尝试之后,我得到了以下结果:在插入后查看时创建触发器chck_pcmem就好像存在一样从查看开始选择COUNTpcmem_id>3错误“每篇论文只有3个PC成员”;结束是这样吗?我添加了一个创建触发器的示例。我建议使用像HeidiSQL这样的工具来创建触发器,然后导出它们。太棒了!非常感谢你的帮助,保罗!