实验四  表的创建一、 实验目的
1、熟练掌握通过SQL*PLUS工具实现在一定物理存储结构和逻辑存储结构要求下的标准表的创建;
2、熟练掌握对表创建各种约束和索引的操作;
3、掌握创建索引化表和分区表的方法;
4、熟练掌握创建聚簇、聚簇表、序列、公共同义词和视图的方法。
二、 实验内容
在SQL*PLUS工具中实现:
1、按指定要求创建标准表;
2、按要求在表上创建约束和索引;
3、创建索引化表和分区表;
4、创建聚簇、聚簇表、序列、公共同义词和视图。
三、 实验步骤
1、 创建class和student两个表;
要求:1)这两个表存放在USERS表空间内
2)给这表student分配50K的两个区,后续分配的区大小每次增长50%,最多只能分配100个区。
class
列名 数据类型 约束 说明
CNO NUMBER(2) 主键 班级号
CNAME VARCHAR2(20) 班级名称
NUM NUMBER(3) 班级人数student
列名 数据类型 约束 说明
SNO NUMBER(4) 主键 学号
SNAME VARCHAR2(10) 唯一 姓名
SAGE NUMBER 年龄
SEX CHAR(2) 性别
CNO NUMBER(2) 外键 班级号
2、将student表中的外键约束改为可以延时的外键约束。
    3、为student表的SAGE列添加一个检查约束,保证该列取值在0-100之间;    4、为student表的SEX列添加一个检查约束,保证该列的取值为M或者F,并且默认值为M;    5、在class表的CNAME列上创建一个唯一性索引;    6、利用子查询创建一个索引化表student_index,其表结构和student表相同;    7、创建一个student_range表,结构与student表相同,按学生年龄分为3个区,低于18岁的学生信息放入part1区,存储在USERS表空间中;18-20的学生信息放入part2区,存储在ORCLTBS1表空间中;其他数据放在part3区,存储在ORCLTBS2表空间中。
    8、创建一个student_list表,结构与student表相同,按学生性别分为两个区,分别存放于ORCLTBS1表空间和ORCLTBS2表空间;
    9、 创建一个class_number簇,聚簇字段名CNO,类型为NUMBER(2),并利用该簇创建student_cno和class_cno两个聚簇表。    10、创建一个起始值为10000的序列,步长为2,最大值为100 000,不可循环;
   
    11、为SCOTT模式下的emp表创建一个公共同义词,名称为employee;    12、创建一个视图,包含学号、姓名以及该生所在班级的班级名称。四、思考题:
    1、在class表中当前存在有1-4号的班级,此时在学生表中要插入5号班级的学生信息。那么正确的操作的顺序是什么?如果要先在学生表中插入信息,再在班级表中插入信息,可以怎样操作?    2、约束的删除可以使用约束名或者约束内容进行删除,那么在主键约束、外键约束、唯一性约束,检查约束和非空约束中,哪些约束可以既用约束名删除也能用约束内容删除,哪些约束只能用约束名删除?五、实验小结(请列出此次上机中遇到的所有错误代码及其解决方式)

解决方案 »

  1.   


    1.建表
    create table class(
           cno number(2) primary key,--班级号
           cname varchar2(20),       --班级名称
           num number(3)             --班级人数
           )
    tablespace users
    --
    create table student(
           sno number(4) primary key,  --学号
           sname varchar2(10),  --姓名
           sage number check(sage between 1 and 100),--年龄
           sex char(2) default 'M' check(sex in('M','F')),--性别
           cno number(3)
               constraint student_fk_class
               references class(cno)   --班级号
           )
    tablespace users
    storage (
            initial 50k
            next 25k
            minextents 2
            maxextents 100
            )
    --
    2、将student表中的外键约束改为可以延时的外键约束。
    alter table student modify constraint student_fk_class initially deferred;
    --
    3、为student表的SAGE列添加一个检查约束,保证该列取值在0-100之间;
    --
    4、为student表的SEX列添加一个检查约束,保证该列的取值为M或者F,并且默认值为M;
    --
    5、在class表的CNAME列上创建一个唯一性索引;
    create unique index on class_cname_idx class(cname) users;
    --
    6、利用子查询创建一个索引化表student_index,其表结构和student表相同;
    create table student_index as
           select * from student;
    7.
    --
    8.
    --
    9、 创建一个class_number簇,聚簇字段名CNO,类型为NUMBER(2),
    create cluster class_number(cno number(2));
    并利用该簇创建student_cno和class_cno两个聚簇表。
    create table student_cno cluster class_number(cno) as select * from student;
    create table class_no cluster class_number(cno) as select * from class;
    --
    10、创建一个起始值为10000的序列,步长为2,最大值为100 000,不可循环
    create sequence increnum
           start with 10000
           increment by 2
           maxvalue 100000
           nocycle;
    --
    11、为SCOTT模式下的emp表创建一个公共同义词,名称为employee
    create synonym employee for scott.emp;
    --
    12、创建一个视图,包含学号、姓名以及该生所在班级的班级名称
    create or replace view student_info_view as
    select s.sno,s.sname,c.cname
    from student s,class c
    where s.cno=c.cno;
    --
    四-1.
        1?.现在class表中插入班级号为5的班级信息,再向student表中添加5号班级的学生;
        2?.可以延迟外键约束:
        alter table student modify constraint student_fk_class initially deferred;
        在commit时才检查约束;
    四-2.
         删除主键:alter table student drop primary key;
         删除外键:alter table student drop constraint student_fk_class;
         只能删除约束名:主键约束,唯一约束,唯一约束,非空约束,外键约束
         既用约束名删除也能用约束内容删除:检查约束
      

  2.   


    7、创建一个student_range表,结构与student表相同,按学生年龄分为3个区,
    低于18岁的学生信息放入part1区,存储在USERS表空间中;18-20的学生信息放入part2区,
    存储在ORCLTBS1表空间中;其他数据放在part3区,存储在ORCLTBS2表空间中。
    create table student_range(
           sno number(4) primary key,
           sname varchar2(10),
           sage number check(sage between 1 and 100),
           sex char(2) default 'M' check(sex in('M','F'),
           cno number(3)
               constraint student_range_fk_class
               references class(cno)
           )
           partition by range(sage)
           (partition part1 values less than 18
                      tablespace users,
            partition part2 values less than 20
                      tablespace oracltbs1,
            partition part3 values less than 100
                      tablespace oracltbs2);
    --
    8.创建一个student_list表,结构与student表相同,按学生性别分为两个区,
    分别存放于ORCLTBS1表空间和ORCLTBS2表空间;
    create table student_list(
           sno number(4) primary key,
           sname varchar2(10),
           sage number check(sage between 1 and 100),
           sex char(2) default 'M' check(sex in('M','F'),
           cno number(3)
               constraint student_range_fk_class
               references class(cno)
           )
           partition by range(sex)
           (partition part1 values ('M') tablespace ORACLTBS1,
            partition part2 values ('F') tablespace ORACLTBS2
           );
      

  3.   


    11、为SCOTT模式下的emp表创建一个 公共同义词,名称为employee;
    create public synonym employee for scott.emp;