mysql - 尝试更新作为主键和其他表的外键的数据库属性
问题描述
尝试更新 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 ) ) );
解决方案
有两种可能的解决方案
- 在 SKILL 表中创建 Id 列,并在其他表中使用该 ID 列作为外键。
- 在外键上添加 CASCADE ON UPDATE 规则。
推荐阅读
- r - R:data.table,按存储在变量中的列名聚合数据框
- arrays - 如何在 Swift 中编写语法二维数组两种类型的数组
- c# - Linq SUM 值错误
- visual-studio - Azure WebJob - 创建目录失败
- javascript - 将 jQuery ajax 调用写入 JavaScript 的 XmlHttpRequest
- javascript - MomentJS plus Map 已弃用错误
- algorithm - 具有递归和循环的程序的时间复杂度
- regex - sed -n 中的多模式
- css - 如何使用角材料表使表中的按钮响应
- html - 图片未显示在 div 中