当前位置: 首页 > 知识库问答 >
问题:

关于sql外键

刘昌翰
2023-03-14

有人能帮我学习SQL吗?我正在使用Oracle SQL*plus

  1. 创建以下表。

学生

  • stdNo CHAR(5)这是主键

课程

  • courseID CHAR(8)这是主键

学期

  • SemesterID CHAR(5)这是主键
  • SemesterCode INT确保SemesterCode介于1和4之间
  • 年份INT确保年份在2000到9999之间

注册

>

主键(stdNo、courseID、semesterID)

在这里SQL(我使用OracleSQL*plus)...表STD,SEMESTER与我一起工作,但表当然我不知道如何把默认值是2和表REGISTER剂量不与我一起工作:(

CREATE TABLE STD 
(
    STDNO CHAR(5) PRIMARY KEY,
    LASTNAME VARCHAR(25) NOT NULL,
    GIVENNAME VARCHAR(50) NOT NULL,
    DEPT CHAR(4)
);

CREATE TABLE SEMESTER 
(
    SEMESTERID CHAR(5) PRIMARY KEY,
    SEMESTERCODE INT CHECK(SEMESTERCODE BETWEEN 1 AND 4),
    YEARS INT CHECK(YEARS BETWEEN 2000 AND 9999)
);

CREATE TABLE COURSE 
(
    COURSEID CHAR(8) PRIMARY KEY,
    COURSETITLE VARCHAR(50) NOT NULL UNIQUE,
    COST DECIMAL(6,2) CHECK(COST >= 0),
    CREDITS INT CHECK(CREDITS BETWEEN 0 AND 200)
);

CREATE TABLE REGISTER 
(
     STDNO CHAR(5)
          FOREIGN KEY REFERENCES STD(STDNO) 
             ON UPDATE CASCADE ON DELETE CASCADE,
     COURSEID CHAR(5) 
          FOREIGN KEY REFERENCES COURSE(COURSEID) 
             ON UPDATE CASCADE ON DELETE CASCADE,
     SEMESTERID CHAR(5)
          FOREIGN KEY REFERENCES SEMESTER(SEMESTERID) 
             ON UPDATE CASCADE ON DELETE CASCADE,
     GRADE CHAR(2),
     MARK DECIMAL(4,2) CHECK(MARK BETWEEN 0.00 AND 100.0),

     PRIMARYKEY(STDNO,COURSEID,SEMESTERID)
);

共有1个答案

龙德润
2023-03-14

请在下面找到解决方案。

>

创建表课程(COURSEID CHAR(8)主键,COURSETITLE VARCHAR(50)不为空唯一,成本小数(6,2)检查(成本

寄存器-Oracle不允许带有“更新级联”的外键约束。因此,您必须使用触发器来完成相同的任务。在下面找到您可以使用的脚本,

创建表寄存器(STDNO CHAR(5),COURSEID CHAR(8),--将数据类型更新为与主表SEMESTERID CHAR(5),GRADE CHAR(2),MARK DECIMAL(4,2)CHECK(MARK介于0.00和100.0之间),约束寄存器pk主键(STDNO,COURSEID,SEMESTERID),约束寄存器fk1外键(STDNO)在删除级联上引用STD(STDNO)相同,约束寄存器_fk2外键(COURSEID)在删除级联上引用课程(COURSEID),约束寄存器_fk3外键(SEMESTERID)在删除级联上引用学期(SEMESTERID);

为每行开始更新寄存器集stdno=:NEW在std上更新stdno后创建或替换触发器级联\u stdno\u update。stdno,其中stdno=:OLD。挪威;结束/

创建或替换触发器cascade_courseid_update更新后的课程每一行开始更新注册设置课程=: NEW. Courseid其中课程=: OLD. Courseid;结束;/

创建或替换触发器cascade_semesterid_update在学期更新后为每一行开始更新寄存器设置Semesterid=: NEW. Semesterid其中Semesterid=: OLD. Semesterid; END;/

 类似资料:
  • null null 表名: ISBN->外键 authorid->外键 既然Linq-to-SQL会根据外键关系自动创建属性,为什么下面的代码块不会触发智能感知呢?对我来说不是... 它不允许我添加照片,但“author”与AuthorISBN有“一对多”关系,“titles”也与AuthorISBN有“一对多”关系 代码:

  • 我无法在sqlworkbench中使用delete命令,每次尝试使用delete命令时都会出现错误,您可以在随问题附上的图像中看到。 我正在附上错误的截图。错误以绿色突出显示,最后一个:

  • 我做了一个图书馆管理系统。我正试图打印学生问题书,但SQL查询遇到了问题。下面是用户。用于打印发行书籍的php代码。我也上传了数据库,方便大家参考。请帮忙。 使用者php 以下是图书馆管理系统的数据库。 数据库是这样关联的:-usertable将id作为主键。Book将isbn作为主键,bookid作为外键。类型将bookid作为主键。存折的外键为isbn,主键为uid。我想显示存折,其中会显示存

  • 问题内容: 对于SQL Server 2000_ 对于给定的表“ foo”,我需要一个查询来生成一组表,这些表具有指向foo的外键。 问题答案: SELECT o2.name FROM sysobjects o INNER JOIN sysforeignkeys fk on o.id = fk.rkeyid INNER JOIN sysobjects o2 on fk.fkeyid = o2.id

  • 主要内容:示例,删除外键,主键 VS 外键SQL 外键(Foreign Key)用于将两个表连接在一起,让两个表的数据保持同步。 外键由表中的一个字段或者多个字段构成,一个表的外键用来指向另一个表的主键(Primary Key)。包含外键的表称为从表,被指向的表称为主表。从表的数据受到主表的约束,向从表中插入或者更新数据时,外键的值必须存在于主表的主键中。 下面的例子能够很好地说明什么是外键。现在有两个表,分别是 user 和 order

  • 问题内容: 是否存在与SQL表达式等效的关系代数? 例如,如果我有关系: 我想删除A1在A2中的关系中的所有元组。在SQL中,我可能会查询: 真正令我困扰的是如何在关系代数选择运算符内进行子查询,这可能吗?: 蟽一些子查询在这里R 问题答案: 在关系代数中,可以使用笛卡尔乘积来实现。就像是: 的R -蚁A1,A2(蟺A11,A21(蟽A11 = A22(蚁A11,A21(R)X蚁A12,A22(R