实验一:SQL数据定义

三、实验步骤:

在MySQL数据库管理系统或SQL SERVER 环境下利用图形操作界面(非SQL语句)实现以下操作:

1、创建用于学生管理的数据库,数据库名为XSGL,包含学生信息,课程信息和选课信息。

数据库XSGL包含下列3 个表:

Create database xsgl;

(l) student:学生基本信息。

create table student(

  sno VARCHAR(8) primary key,

    sname varchar(4) not null,

    ssex varchar(2) default '男',

    sage int,

    sdept varchar(10)

);

(2)course:课程信息表。

create table course(

  cno varchar(2) PRIMARY key,

    cname varchar(30),

    credit int,

    cpno varchar(3)

);

(3)sc:学生选课表。

create table sc(

  sno varchar(10),

    cno varchar(30),

    PRIMARY key(sno,cno),

   CONSTRAINT sno FOREIGN key(sno) REFERENCES student(sno),

        CONSTRAINT cno FOREIGN key(cno) REFERENCES course(cno),

         grade int CHECK(grade >=0 and grade <=100)

);

各表的结构分别如表1、表2和表3 所示。

表1 学生信息表:student

列名

数据类型

长度

完整性约束

sno

字符(文本)型

8

主键

sname

字符(文本)型

4

不为空

ssex

字符(文本)型

2

默认值为’男’

取值为’男’或’女’

sage

整数(数值)型

sdept

字符型

10

表2 课程信息表:course

列名

数据类型

长度

完整性约束

cno

字符(文本)型

2

主键

cname

字符(文本)型

30

credit

整数(数值)型

cpno

字符(文本)型

3

表3 学生选课表:sc

列名

数据类型

长度

完整性约束

sno

字符(文本)型

10

主属性,外键

cno

字符(文本)型

30

主属性,外键

grade

整数(数值)型

取值在0-100之间

提示:在不使用SQL语句创建表的情况下,可通过SQL SERVER 2008中的数据库关系图(数据库节点展开—数据库关系图)实现外键的创建。外键字段和参照字段之间的数据类型以及长度要保持一致。

2、输入表中的记录

分别在student表、course表和sc表中输入如下表中的记录:

sno

sname

ssex

sage

sdept

95001

李勇

20

CS

95002

刘晨

19

IS

95003

王敏

18

MA

95004

张立

19

IS

95005

刘云

18

CS

cno

cname

credit

pcno

1

数据库

4

5

2

数学

6

3

信息系统

3

1

4

操作系统

4

6

5

数据结构

4

7

6

数据处理

3

7

PASCAL语言

4

6

sno

cno

grade

95001

1

92

95001

2

85

95001

3

88

95002

2

90

95002

3

80

95003

2

85

95004

1

58

95004

2

85

insert into student(sno,sname,ssex,sage,sdept) values('95001','李勇','男',20,'CS'),

('95002','刘晨','女',19,'IS'),

('95003','王敏','女',18,'MA'),

('95004','张立','男',19,'IS'),

('95005','刘云','女',18,'CS');



insert into course (cno,cname,credit,cpno) values ('1','数据库',4,'5'),

 ('2','数学',6,''),

 ('3','信息系统',3,'1'),

 ('4','操作系统',4,'6'),

 ('5','数据结构',4,'7'),

 ('6','数据处理',3,''),

 ('7','PASCAL语言',4,'6');



 insert into sc(sno,cno,grade) values('95001','1',92),

 ('95001','2',85),

 ('95001','3',88),

 ('95002','2',90),

 ('95002','3',80),

 ('95003','2',85),

 ('95004','1',58),

 ('95004','2',85); 

3、对表中的记录进行浏览、修改、删除操作。

4、利用“分离数据库”和 “附加数据库”操作对SQL Server中创建的数据库做备份和还原操作。在MySQL中利用备份工具备份数据库,并了解如何还原数据。

5、用ALTER语句修改表结构;

  1. STUDENT表中增加一个字段入学时间scome:  
      alter table student add scome date;
                      
  2. 删除STUDENT表中sdept字段:
alter table student drop sdept;
  1. 删除创建的SC表中CNO字段和COURSE表CNO字段之间的外键约束;

  

   alter table sc drop FOREIGN key cno;
  1. 重建3)中删除的约束
  alter table sc add constraint cno FOREIGN key(cno) REFERENCES course(cno);

6、用CREATE INDEX语句在表STUDENT的SNAME字段上创建唯一索引;

   create UNIQUE index sname_index on student(sname);

7、用DROP语句删除上题中创建的索引;

         drop index sname_index on student;

8、用SQL语句建立如下MySPJ数据库,包括S,P,J,和SPJ四个基本表(教材第二章习题6中的四个表,并添加教材示例数据),要求实现关系的三类完整性。

S(SNO,SNAME,STATUS,CITY);

P(PNO,PNAME,COLOR,WEIGHT);

J(JNO,JNAME,CITY);

SPJ(SNO,PNO,JNO,QTY)

供应商表S由供应商代码(SNO)、供应商姓名(SNAME)、供应商状态(STATUS)、供应商所在城市(CITY)组成。

零件表P由零件代码(PNO)、零件名(PNAME)、颜色(COLOR)、重量(WEIGHT)组成。

工程项目表J由工程项目代码(JNO)、工程项目名(JNAME)、工程项目所在城市(CITY)组成。

供应情况表SPJ由供应商代码(SNO)、零件代码(PNO)、工程项目代码(JNO)、供应数量(QTY)组成,表示某供应商供应某种零件给某工程项目的数量为QTY。

  1. 用SQL语句实现对MySPJ数据库中表结构的修改
  2. create database myspj;
    
    create table s(
    
      sno varchar(4) PRIMARY key,
    
           sname varchar(10),
    
           status varchar(2),
    
           city varchar(10)
    
    );
    
    
    
    create table p(
    
       pno varchar(4) primary key,
    
            pname VARCHAR(10),
    
            color varchar(2),
    
            weight int
    
    );
    
    
    
     create table j(
    
       jno varchar(4) primary key,
    
            jname varchar(10),
    
            city varchar(10)
    
     );
    
    
    
    create table spj(
    
      sno varchar(4),
    
           pno varchar(4),
    
           jno varchar(4),
    
           primary key(sno,pno,jno),
    
           CONSTRAINT sno_fkey FOREIGN key(sno) REFERENCES s(sno),
    
          CONSTRAINT pno_fkey FOREIGN key(pno) REFERENCES p(pno),
    
           CONSTRAINT jno_fkey FOREIGN key(jno) REFERENCES j(jno),     
    
           qty int
    
    );
    
    insert into s(sno,sname,status,city) values ('s1','精益','20','天津'),('s2','盛锡','10','北京'),
    
    ('s3','东方红','30','北京'),
    
    ('s4','丰泰盛','20','天津'),
    
    ('s5','为民','30','上海');
    
    
    
    insert into p(pno,pname,color,weight) values('p1','螺母','红',12),
    
    ('p2','螺栓','绿',17),
    
    ('p3','螺丝刀','蓝',14),
    
    ('p4','螺丝刀','红',14),
    
    ('p5','凸轮','蓝',40),
    
    ('p6','齿轮','红',30);
    
    
    
    insert into j(jno,jname,city) values ('j1','三建','北京'),
    
    ('j2','一汽','北京'),
    
    ('j3','弹簧厂','天津'),
    
    ('j4','造船厂','天津'),
    
    ('j5','机车厂','唐山'),
    
    ('j6','无线电厂','常州'),
    
    ('j7','半导体厂','南京');
    
    
    
    insert into spj (sno,pno,jno,qty) values ('S1','P1','J1',200),
    
    ('s1','p2','j3',100),
    
    ('s1','p1','j4',700),
    
    ('s1','p2','j2',100),
    
    ('s2','p3','j1',400),
    
    ('s2','p3','j2',200),
    
    ('s2','p3','j4',500),
    
    ('s2','p3','j5',400),
    
    ('s2','p5','j1',400),
    
    ('s2','p5','j2',100),
    
    ('s3','p1','j1',200),
    
    ('s3','p3','j1',200),
    
    ('s4','p5','j1',100),
    
    ('s4','p6','j3',300),
    
    ('s4','p6','j4',200),
    
    ('s5','p2','j4',100),
    
    ('s5','p3','j1',200),
    
    ('s5','p6','j2',200),
    
    ('s5','p6','j4',500);

(1)S表的Sname属性列的取值唯一。

alter table s add UNIQUE(sname);

(2)P表中Weight属性列的取值范围在1-50之间。

ALTER TABLE p ADD CONSTRAINT weight_limlit CHECK(weight between 1 and 50);

(3)J表中Jname的取值不能为空,并且是唯一的。

alter table j add CONSTRAINT jname_s unique(jname);

alter table j change column jname jname varchar(10) not null;

(4)SPJ表中QTY属性列的类型是int。

alter table spj modify qty int;

(5)给S表增加Sphone和Semail两列,分别用来存放供应商的电话号码和电子邮箱。

alter table s add column sphone varchar(11),add column semail varchar(20);

(6)删除Jname属性列的唯一约束。

alter table j drop CONSTRAINT jname_s;

(7)删除S表中属性列Semail。

alter table s drop column semail;

你可能感兴趣的:(mysql,sql,mysql,数据库)