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

一、实验目的
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表

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

p表

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

j表

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

spj表

sno pno jno qty
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
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);

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