Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.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
Database 关于sql外键_Database_Oracle_Foreign Keys - Fatal编程技术网

Database 关于sql外键

Database 关于sql外键,database,oracle,foreign-keys,Database,Oracle,Foreign Keys,有人能帮我学习SQL吗?我正在使用Oracle SQL*plus 创建以下表格 表学生: stdNo CHAR(5)这是主键 lastname VARCHAR(25)不能为Null givennames VARCHAR(50)不能为Null 部门主任(4) 表课程: courseID CHAR(8)这是主键 CourseTile VARCHAR(50)必须唯一且不为空 成本小数(6,2)确保成本大于或等于零 积分INT确保积分在0到200之间。默认值也是2 表学期: semesterI

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

  • 创建以下表格
  • 学生

    • stdNo CHAR(5)这是主键
    • lastname VARCHAR(25)不能为Null
    • givennames VARCHAR(50)不能为Null
    • 部门主任(4)
    课程

    • courseID CHAR(8)这是主键
    • CourseTile VARCHAR(50)必须唯一且不为空
    • 成本小数(6,2)确保成本大于或等于零
    • 积分INT确保积分在0到200之间。默认值也是2
    学期

    • semesterID CHAR(5)这是主键
    • semesterCode INT确保semesterCode介于1和4之间
    • 年份INT确保年份介于2000和9999之间
    寄存器

    • stdNo CHAR(5)在Student表中引用stdNo的外键,在update cascade On delete cascade上
    • courseID CHAR(8)在更新级联时在删除级联时在课程表中引用courseID的外键
    • semesterID CHAR(5)在学期表中引用semesterID的外键,在更新级联时在删除级联时
    • 等级字符(2)
    • 标记小数(4,2)标记应介于0.00和100.00之间

    • 主键(stdNo、courseID、semesterID)

    这里是SQL(我使用的是Oracle SQL*plus)。。表STD,学期适用于我,但表课程我不知道如何将默认值设置为2,表寄存器完全不适用于我:(


    请在下面找到解决方案

  • 课程-请使用下面的脚本为“学分”列设置默认值

    创建表格课程 ( COURSEID字符(8)主键, CourseTile VARCHAR(50)非空唯一, 成本十进制(6,2)检查(成本>=0), 积分INT默认值2检查(0到200之间的积分) ))

  • REGISTER-Oracle不允许使用带有“ON UPDATE CASCADE”的外键约束。因此,您必须使用触发器进行相同的操作。请在下面找到您可以使用的脚本

    创建表寄存器 ( STDNO CHAR(5), COURSEID CHAR(8)——将数据类型更新为与主表相同 半甾体半焦(5), 煤焦等级(2), 标记十进制(4,2)检查(标记在0.00和100.0之间), 约束寄存器主键(STDNO、COURSEID、SEMESTERID), 约束寄存器\u fk1外键(STDNO)引用STD(STDNO) 在删除级联时, 约束寄存器_fk2外键(COURSEID)引用了过程(COURSEID) 在删除级联时, 约束寄存器\u fk3外键(SEMESTERID)引用学期(SEMESTERID) 关于删除级联 ))

    创建或替换触发器级联\u stdno\u更新 std上更新stdno后 每行 开始 更新寄存器 设置stdno=:NEW.stdno 其中stdno=:OLD.stdno; 结束; /

    创建或替换触发器级联\u courseid\u更新 更新课程上的courseid后 每行 开始 更新寄存器 设置courseid=:NEW.courseid 其中courseid=:OLD.courseid; 结束; /

    创建或替换触发器级联\u semesterid\u更新 学期更新semesterid后 每行 开始 更新寄存器 设置semesterid=:NEW.semesterid 其中semesterid=:OLD.semesterid; 结束; /


  • 欢迎使用StackOverflow:如果您发布代码、XML或数据示例,请在文本编辑器中突出显示这些行,并单击编辑器工具栏上的“代码示例”按钮(
    {}
    ),以精确地格式化和语法突出显示它!
    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)
    );