实验二 创建数据库与数据表

一、实验目的
1.掌握使用sql语句创建、删除和修改数据库。
2.掌握使用sql语句创建、删除和修改数据表结构,创建各种完整性约束。
3.掌握数据更新语句insert、update和delete的使用。
二、实验内容

  1. 用create database语句创建名为“project”的数据库,字符集和排序规则采用系统默认。
CREATE DATABASE project;
  1. 用create table语句在project数据库下创建4个关系,如下:
    供应商关系s(sno, sname, city)
    零件关系p(pno, pname, color, weight)
    工程项目关系j(jno, jname, city)
    供应情况关系 spj(sno, pno, jno, qty)
    其中:
    供应商关系s由供应商代码(sno)、供应商姓名(sname)、供应商所在城市(city)组成;
    零件关系p由零件代码(pno)、零件名(pname)、颜色(color)、重量(weight)组成;
    工程项目关系j由工程项目代码(jno)、工程项目名(jname)、工程项目所在城市(city)组成;
    供应情况关系spj由供应商代码(sno)、零件代码(pno)、工程项目代码(jno)、供应数量组成(qty),表示某供应商供应某种零件给某工程项目的数量为qty。
    要求:
    ① 创建每个关系的主键,有外键的创建外键。
    ② s表中的sname属性列的取值唯一。
    ③ p表中weight属性列的取值范围在1-50之间。
    ④ j表中的jname取值不能为空并且是唯一的。
CREATE TABLE s (
    sno CHAR(2) PRIMARY KEY,
    sname VARCHAR(20) UNIQUE NOT NULL,
    city VARCHAR(20),
    CONSTRAINT s_ck CHECK (sno LIKE 's%')
);

CREATE TABLE p (
    pno CHAR(2) PRIMARY KEY,
    pname VARCHAR(20),
    color VARCHAR(10),
    weight INT CHECK (weight BETWEEN 1 AND 50)
);

CREATE TABLE j (
    jno CHAR(2) PRIMARY KEY,
    jname VARCHAR(30) UNIQUE NOT NULL,
    city VARCHAR(20)
);

CREATE TABLE spj (
    sno CHAR(2),
    pno CHAR(2),
    jno CHAR(2),
    qty int,
    PRIMARY KEY (sno, pno, jno),
    FOREIGN KEY (sno) REFERENCES s(sno),
    FOREIGN KEY (pno) REFERENCES p(pno),
    FOREIGN KEY (jno) REFERENCES j(jno)
);

3.用alter table语句完成以下操作:
① 给s表增加sphone和smanager两个属性列,分别用来存放供应商的联系电话和联系人。
② 删除jname属性列取值唯一的约束。
③ 修改qty属性列的数据类型,使qty列数据的总长度不超过12,其中保留2位小数。
④ 删除s表中的属性列smanager

ALTER TABLE s ADD COLUMN sphone VARCHAR(20);
ALTER TABLE s ADD COLUMN smanager VARCHAR(30);

ALTER TABLE j DROP CONSTRAINT jname;

ALTER TABLE spj MODIFY COLUMN qty DECIMAL(10, 2);

ALTER TABLE s DROP COLUMN smanager;
  1. 将下列数据导入s,p,j和spj表中:

s表

snosnamecitysphone
s1精益天津022-58733316
s2盛锡北京010-68869007
s3东方红北京010-88710998
s4丰泰盛天津022-67967508
s5为民上海021-33166665

p表

pnopnamecolorweight
p1螺母12
p2螺栓绿17
p3螺丝刀14
p4螺丝刀14
p5凸轮40
p6齿轮30

j表

jnojnamecity
j1三建北京
j2一汽长春
j3弹簧厂天津
j4造船厂天津
j5机车厂唐山
j6无线电厂常州
j7半导体厂南京

spj表

snopnojnoqty
s1p1j1200
s1p1j3100
s1p1j4700
s1p2j2100
s2p3j1400
s2p3j2200
s2p3j4500
s2p3j5400
s2p5j1400
s3p1j1200
s3p3j1200
s4p5j1100
s4p6j3300
s4p6j4200
s5p2j4100
s5p3j1200
s5p6j2200
s5p6j4500
INSERT INTO s (sno, sname, city, sphone) VALUES
('s1', '精益', '天津', '022-58733316'),
('s2', '盛锡', '北京', '010-68869007'),
('s3', '东方红', '北京', '010-88710998'),
('s4', '丰泰盛', '天津', '022-67967508'),
('s5', '为民', '上海', '021-33166665');

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', 'p1', '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),
('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. 用SQL语句对表中的数据完成以下更新操作。
    (1)现有一供应商,代码为s9、姓名为英特尔、所在城市西安,供应情况如下:供应零件p5给工程j7数量为600,供应零件p4给工程j4数量为500,请将此供应商的信息和供应信息插入到相应的关系中。
    (2)请将北京供应商的供应数量加150。
    (3)把全部红色零件的颜色改为黑色。
    (4)由s5供给j4的零件p6改为由s1供应。
    (5)请将(s2,p4,j7,510)(s2,p4,j6,300)插入供应情况关系。
    (6)零件p1已经停产,请将p1的相关信息从数据库中删除。
INSERT INTO s (sno, sname, city, sphone) VALUES ('s9', '英特尔', '西安', '029-12345678');
INSERT INTO spj (sno, pno, jno, qty) VALUES ('s9', 'p5', 'j7', 600), ('s9', 'p4', 'j4', 500);

UPDATE spj SET qty = qty + 150 WHERE sno IN (SELECT sno FROM s WHERE city = '北京');


UPDATE p SET color = '黑' WHERE color = '红';


UPDATE spj SET sno = 's1' WHERE sno = 's5' AND jno = 'j4' AND pno = 'p6';


INSERT INTO spj (sno, pno, jno, qty) VALUES ('s2', 'p4', 'j7', 510), ('s2', 'p4', 'j6', 300);

DELETE FROM spj WHERE pno = 'p1';
DELETE FROM p WHERE pno = 'p1';

6.在实验一创建的student,course,teacher,sc,tc表中用SQL语句完成以下操作。
(1)学生“刘家顺”要退学,请删除该学生的所有记录(包括选课记录和学生记录)。
(2)田小亮同学要转专业,他的学号为103465,将该同学的专业由原来的“软件工程”改为“计算机科学与技术”,班级由原来的“软工3班”修改为“计算机1班”。
(3)删除选修了“嵌入式系统与应用”但没有及格的选课记录。
(4)将元组(1203076,吕振华,男,1985/11/8,讲师,体育部)插入教师关系。
(5)在course表中插入以下两门课程信息:
课程号:3094217,课程名:图与网络,课程学分:2,课程性质:选修,课程学时:32,开课学期:6
课程号:3094215,课程名:智能搜索与推荐技术,课程学分:2,课程性质:选修,课程学时:32,开课学期:7

DELETE FROM student WHERE Sname = '刘家顺';

UPDATE student SET Smajor = '计算机科学与技术', Sclass = '计算机1班' WHERE  Sno = '103465';

DELETE FROM sc WHERE Cno = '2094513' AND Grade < 60;

INSERT INTO teacher (Tno, Tname, Tsex, Tbirth, Ttitle, Tcollege) VALUES (1203076, '吕振华', '男', '1985-11-8', '讲师', '体育部');

ALTER TABLE tc
REFERENCES course(Cno)
ON DELETE CASCADE
ON UPDATE CASCADE;

INSERT INTO course (Cno, Cname, Credit, Cproperty, Chour, Cterm) VALUES (3094217, '图与网络', 2, '选修', 32, 6),(3094215, '智能搜索与推荐技术', 2, '选修', 32, 7);
  • 34
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值