首页 > 解决方案 > 尝试更新作为主键和其他表的外键的数据库属性

问题描述

尝试更新 SKILL 表中 COLUMN sname 中的属性,但不允许我这样做,因为表 SPOSSESSED 和 SREQUIRED 中有外键 CONSTRAINT。

这些外键也称为主键 CONSTRAINT,因此不能为 NULL。我该怎么做?

以下是表格:

CREATE TABLE SKILL(
sname         VARCHAR(30)     NOT NULL, /* Skill name */
CONSTRAINT SKILL_pkey PRIMARY KEY ( sname ) );

CREATE TABLE SREQUIRED(
sname         VARCHAR(30)     NOT NULL, /* Skill name*/
requires      VARCHAR(30)     NOT NULL, /* Skill required*/
slevel        DECIMAL(2)      NOT NULL, /* Level required*/
CONSTRAINT SREQUIRED_pkey PRIMARY KEY ( sname, requires ),
CONSTRAINT SREQUIRED_fkey1 FOREIGN KEY ( sname) REFERENCES SKILL( sname ),
CONSTRAINT SREQUIRED_fkey2 FOREIGN KEY ( requires ) REFERENCES SKILL( sname ) );

CREATE TABLE SPOSSESSED(
anumber     DECIMAL(6)  NOT NULL, /* Applicant number*/
sname       VARCHAR(30) NOT NULL, /* Skill name*/
slevel      DECIMAL(2)  NOT NULL, /* Skill level*/
CONSTRAINT SPOSSESSED_pkey PRIMARY KEY ( anumber, sname ), 
CONSTRAINT SPOSSESSED_fkey1 FOREIGN KEY ( anumber ) REFERENCES APPLICANT ( anumber ) ON DELETE CASCADE,
CONSTRAINT SPOSSESSED_fkey2 FOREIGN KEY ( sname )REFERENCES SKILL ( sname ),
CONSTRAINT SPOSSESSED_check1 CHECK ( slevel IN ( 1,2,3,4,5,6,7,8,9,10 ) ) );

标签: mysqlforeign-keys

解决方案


有两种可能的解决方案

  1. 在 SKILL 表中创建 Id 列,并在其他表中使用该 ID 列作为外键。
  2. 在外键上添加 CASCADE ON UPDATE 规则。

推荐阅读