• 数据库——SQL-SERVER练习(4) 建表及数据完整性


    1、 输入下图的语句, 建立学生表STU.

    CREATE TABLE STU
    (
          SNO NUMERIC(5) PRIMARY KEY,
          SNANE CHAR(6) NOT NULL,
          SSEX CHAR(2) CHECK (SSEX IN ('','')),
          SDEPT CHAR(10)
    );

    2、输入下图的语句, 建立课程表COU.

    CREATE TABLE COU
    (
          CNO NUMERIC(2) PRIMARY KEY,
          CNANE CHAR(10) NOT NULL UNIQUE,
          CPNO NUMERIC(2) REFERENCES COU(CNO),
          CCREDIT NUMERIC(2)
    );

    3、输入下图的语句, 建立选课表STUCOU.

    CREATE TABLE STUCOU
    (
          SNO NUMERIC(5) REFERENCES STU(SNO), 
          CNO NUMERIC(2) REFERENCES COU(CNO),
          GRADE NUMERIC(6,2),
          PRIMARY KEY(SNO,CNO)
    );

    4、 建立供应商表:   ST(Sno,Sname,City)  
         各列数据类型分别为( CHAR(8), CHAR(20), CHAR(20) )
         约束:Sno为主码,Sname唯一,City非空

    CREATE TABLE ST
    (
          SNO CHAR(8) PRIMARY KEY,
          SNAME CHAR(20) UNIQUE,
          CITY CHAR(20) NOT NULL
    )


    5、建立零件表:  PT(Pno,Pname,Color)
         各列数据类型分别为( CHAR(8), CHAR(20), CHAR(20) )
         约束:Pno为主码,Pname非空,Color只能是红,黑,蓝

    CREATE TABLE PT
    (
          PNO CHAR(8) PRIMARY KEY,
          PNAME CHAR(20) NOT NULL,
          COLOR CHAR(20) CHECK (COLOR IN ('','',''))
    )

     6、建立工程表:  JT(Jno,Jname)        
         各列数据类型分别为( CHAR(8),  CHAR(20) )
         约束:Jno为主码,Jname唯一

    CREATE TABLE JT
    (
          JNO CHAR(8) PRIMARY KEY,
          JNAME CHAR(20) UNIQUE
    )

    7、建立供应表:  SPJT(Sno,Pno,Jno,Qty)
         各列数据类型分别为( CHAR(8),CHAR(8),CHAR(8), INT )
         约束:(Sno,Pno,Jno)为主码,   Qty要大于0
          Sno是外码参照ST,Pno是外码参照PT, Jno是外码参照JT

    CREATE TABLE SPJT
    (
          SNO CHAR(8) REFERENCES ST(SNO),
          PNO CHAR(8) REFERENCES PT(PNO),
          JNO CHAR(8) REFERENCES JT(JNO),
          QTY INT CHECK (QTY>0),
          PRIMARY KEY (SNO,PNO,JNO)
    )

    8、查看批处理文件CREATE_TABLES.SQL中对学生三个表的定义(不用执行),  写出以下引起完整性约束报错的操作语句,记录显示的出错信息,并解释操作违反了何种数据完整性?

    (1) 执行下面语句:

    insert INTO STUDENT(sname, ssex,sage,sdept) values( '刘楠','',20,'CS');

    1).出错信息

    2). 对出错信息的解释( 出错原因, 违反了哪种完整性等):

    出错原因,主属性为空置,违反了实体完整性。

    (2)修改student中数据, 将95001的学号改为99001

    1).语句:

    UPDATE STUDENT
    SET SNO='99001'
    WHERE SNO='95001'

    2).出错信息(将出错信息复制至此):

     

    3).对出错信息的解释( 出错原因, 违反了哪种完整性等)::

    修改student表中一个元组sno属性,造成修改后sc中的sno在student找不到一个元组,其sno属性值与之相等。

    违反了参照完整性。

    (3)删除student中95002的元组

    1).语句:

    DELETE
    FROM STUDENT
    WHERE SNO='95002'

    2).出错信息:

    3).解释:

    从student表中删除一个元组的sno属性,造成sc表中的某些元组的sno属性值在表student中找不到一个元组,其sno值与之对应。

    违反了参照完整性。

    (4)试图在student中插入下面的元组:

     ( 99001,'赵冬','M',19,'CS')

    1).语句:

    INSERT INTO STUDENT(SNO,SNAME,SSEX,SAGE,SDEPT)
    values( '99001','赵冬','M',19,'CS');

    2).出错信息:

     

    3).解释:

    在创建student时限制ssex只能是‘男’,或者‘女’。

    违反了用户自定义完整性。

    (5)删除course中2号课的元组

    1).语句:

    DELETE
    FROM COURSE
    WHERE CNO=2

    2).出错信息:

     

    3).解释:

    从COURSE表中删除一个元组的CNO属性,造成SC表中的某些元组的CNO属性值在表COURSE中找不到一个元组,其CNO值与之对应。违反了参照完整性。

     (6)  在SC中插入一条学号为99990,选1号课,成绩90的学生选课信息

    1).语句:

    INSERT INTO SC(SNO,CNO,GRADE)
    VALUES('99990',1,90);

    2).出错信息:

                     

    3).解释:

    SC表中增加一个元组,该元组的SNO属性值在表STUDENT中找不到一个元组,其SNO属性值与之对应。

  • 相关阅读:
    mysql怎么在已建好的表中添加自增序列
    IDEA报错: Invalid bound statement (not found): com.test.mapper.UserMapper.selectByPrimaryKey(转发:https://www.cnblogs.com/woshimrf/p/5138726.html)
    Windows下重置MySQL密码(最开始是因为Access denied for user 'root'@'localhost'这个原因,无法登陆 'root'@'localhost')
    数组逆转
    选择、插入、冒泡排序
    线性单链表
    顺序队列
    栈的应用----表达式求值
    顺序表的应用---若瑟夫问题
    顺序栈
  • 原文地址:https://www.cnblogs.com/wkfvawl/p/10845289.html
Copyright © 2020-2023  润新知