错误代码:3820。检查约束'chk_period_of_execution'是指不存在的列'd_reg_date'


CREATE TABLE IF NOT EXISTS documents (
d_reg_id VARCHAR(255) NOT NULL,
d_reg_date DATE NOT NULL,
d_id varchar(255),
d_date DATE NOT NULL,
d_theme VARCHAR(100) NOT NULL,
d_description VARCHAR(1000),
d_access VARCHAR(3) DEFAULT 'Нет',
d_control VARCHAR(3) DEFAULT 'Нет',
CONSTRAINT pk_reg_id PRIMARY KEY (d_reg_id)
) Engine=InnoDb;
CREATE TABLE IF NOT EXISTS correspondents (
c_id VARCHAR(255) NOT NULL,
c_correspondents VARCHAR(3) NOT NULL,
CONSTRAINT pk_c_id PRIMARY KEY (c_id),
CONSTRAINT fk_c_id FOREIGN KEY (c_id) REFERENCES documents(d_reg_id)
) Engine=InnoDb;
CREATE TABLE IF NOT EXISTS delivery_types (
dt_id VARCHAR(255) NOT NULL,
dt_type VARCHAR(14),
dt_period_of_execution DATE,
CONSTRAINT chk_period_of_execution CHECK (delivery_types.dt_period_of_execution > documents.d_reg_date),
CONSTRAINT pk_dt_id PRIMARY KEY (dt_id),
CONSTRAINT fk_dt_id FOREIGN KEY (dt_id) REFERENCES documents(d_reg_id)
) Engine=InnoDb;

我在这里遇到了问题,我需要检查执行期是否不能早于注册日期。提前谢谢!

check约束只能检查单行中的值,甚至不能引用同一表中的其他行。

对于此功能,您可能需要一个触发器。您也可以使用用户定义的函数来返回其他表中的值。

要精确一点有点困难。check约束在逻辑上确保数据在所有时间内保持一致,而不仅仅是在表中的数据发生更改时。目前尚不清楚这是您只想在值插入delivery_types时、值更改时或值在其他表中也更改时执行的操作。

最新更新