【数据库原理】实验报告-实验4SQL数据定义语句

ops/2025/1/15 22:07:27/

实验名称

实验四  SQL的数据定义语句

实验室

 

实验

目的

要求

  1. 掌握 SQL数据定义语句:create、 drop 、alter各自的功能
  2. 掌握数据库、模式、基本表的创建、修改、删除的SQL语句语法格式
  3. 通过SQL语句完成“电子商务系统”数据库及其基本表、模式的创建、修改和删除实践练习

实验

环境

SQL Server 2014

实验内容或

实验题目

  1. 通过SQL语句创建名为ecommerce1的数据库

CREATE DATABASE ecommerce1

2、在数据库ecommerce1中练习模式的创建和删除语句(如给用户li创建一个学生管理模式“S-T”)(需要先添加一个用户li)

3、在数据库ecommerce1中执行SQL语句操作,创建如下表:

商品类别表:category(catno,catname,describe),主码为catno

商品表:product(prono,proname,brand,stock,supno,price,cost,picture,catno,ontime,status),要求proname不能取空值

供应商表:supplier(supno,supname,contactname,address,telephone),主码为(supno),属性supname不能取空值

订单表:orders(orderno,memno,prono,qty,discount,totalmoney,orderdate,paydate), 属性prono参照商品表product的属性prono,memno参照会员表member的属性memno

会员表:member(memno,memname,address,telephone,username,userpwd)

员工表:employee(empno,empname,depno,sex,telephone,username,userpwd)

部门表:department(depno,depname,manager,deptotal)

(说明:表的属性设置具体参照实验二即可)

4、使用sql语句修改表:

(1)为订单表增加一属性deliverdate(发货日期),数据类型为datetime,允许取空值。

(2)修改商品表中属性列ontime的数据类型为date

(3)为商品类别表中属性列catname增加不能取空值(not null)的约束

(4)为商品表增加一个主码约束,约束名为pk1,主码为prono

(5)为员工表employee的属性userpwd增加一个默认值约束,默认值为123456,约束名为DF1

(6)删除约束DF1

(7)为会员表member属性列username添加取唯一值的约束,约束名为UK1

(8)删除订单表中新增的属性deliverdate

(9)为商品表中属性列catno增加一个外码约束,约束名为FK1,要求其参照商品类别表中主码catno的值

(10)删除会员表、员工表和部门表

步骤如下:

1.通过SQL语句创建名为ecommerce1的数据库

CREATE DATABASE ecommerce1

2.在数据库ecommerce1中练习模式的创建和删除语句(如给用户li创建一个学生管理模式“S-T”)(需要先添加一个用户li)

通过GUI创建用户li后,输入SQL命令:

CREATE SCHEMA S_T AUTHORIZATION li;

  3.在数据库ecommerce1中执行SQL语句操作,创建如下表:

  1. 商品类别表:category(catno,catname,describe),主码为catno

     create table category (

    catno int not null,

    catname varchar(30) not null,

    describe text, 

    primary key (catno)

);

  1. 商品表product(prono,proname,brand,stock,supno,price,cost,picture,catno,ontime,status)要求proname不能取空值

注:需先完成供应商表才可执行此sql命令

    create table product (

    prono int not null,

    proname varchar(30) not null,

    brand varchar(30),

    stock int,

    supno int,

    price smallmoney,

    cost smallmoney,

    picture varchar(30),

    catno int,

    ontime datetime default getdate(),

    satus smallint not null default 0 check (satus in (0, 1, 2)), 

    primary key (prono),

    foreign key (supno) references supplier(supno),

    foreign key (catno) references category(catno)

);

  1. 供应商表:supplier(supno,supname,contactname,address,telephone),主码为(supno),属性supname不能取空值

    create table supplier (

    supno int not null,

    supname varchar(30) not null,

    contactname varchar(20),

    address varchar(30),

    telephone varchar(15),

    primary key (supno)

);

  1. 订单表:orders(orderno,memno,prono,qty,discount,totalmoney,orderdate,paydate), 属性prono参照商品表product的属性prono,memno参照会员表member的属性memno

注:需先创建下面的会员表

create table orders (

    orderno int not null,

    memno int,

    prono int,

    qty int not null,

    discount money not null default 0,

    totalmoney money not null,

    orderdate datetime not null,

    paydate datetime,

    primary key (orderno),

    foreign key (memno) references member(memno),

    foreign key (prono) references product(prono)

);

  1. 会员表:member(memno,memname,address,telephone,username,userpwd)

create table member (

    memno int not null,

    memname varchar(30) not null,

    address varchar(50),

    telephone varchar(15),

    username varchar(30) not null unique,

    userpwd varchar(30) not null,

    primary key (memno)

); 

  1. 员工表:employee(empno,empname,depno,sex,telephone,username,userpwd)
  2. 部门表:department(depno,depname,manager,deptotal)

先创建没有外键约束的department表

CREATE TABLE department (

    depno INT NOT NULL,

    depname VARCHAR(30) NOT NULL,

    manager INT,

    deptotal INT,

    PRIMARY KEY (depno)

);

再正常创建employee表

create table employee (

    empno int not null,

    empname varchar(30) not null,

    depno int,

    sex varchar(4),

    telephone varchar(15),

    username varchar(30) not null,

    userpwd varchar(30) not null,

    primary key (empno),

    foreign key (depno) references department(depno)

);

创建员工表后,再修改department的外键关系

alter table department

add constaint manager_department

foreign key (manager) references employee(empno);

4.使用sql语句修改表:

(1)为订单表增加一属性deliverdate(发货日期),数据类型为datetime,允许取空值。

alter table orders

add deliverdate datetime null;

(2)修改商品表中属性列ontime的数据类型为date

alter table product

alter column ontime date;

(3)为商品类别表中属性列catname增加不能取空值(not null)的约束

alter table category

alter column catname varchar(30) not null;

(4)为商品表增加一个主码约束,约束名为pk1,主码为prono

alter table product

add constraint pk1 primary key (prono);

(5)为员工表employee的属性userpwd增加一个默认值约束,默认值为123456,约束名为DF1

alter table employee

add constraint df1 default '123456' for userpwd;

(6)删除约束DF1

alter table employee

drop constraint df1;

(7)为会员表member属性列username添加取唯一值的约束,约束名为UK1

alter table member

add constraint UK1 unique (username);

(8)删除订单表中新增的属性deliverdate

alter table orders

drop column deliverdate

(9)为商品表中属性列catno增加一个外码约束,约束名为FK1,要求其参照商品类别表中主码catno的值

alter table product

add constraint FK1

foreign key(catno) references category(catno);

(10)删除会员表、员工表和部门表

drop table member;

drop table employee;

drop table department;

组内

分工

可选

  

实验运行结果或者是验证性的结果:

分析结果以及在试验中应注意的问题:

  1. 编写SQL命令时候注意不要写错命令,关键词会有颜色提示。
  2. 执行drop删除命令时候注意,不要写错表格删错内容。
  3. 建表时注意约束关系,小心创建错外键关系。
  4. 填入数据时注意每个表的对应关系,先给没有约束条件的表填数据,再给有约束条件的表填入数据。
  5. 在填写员工表和部门表时,由于这两个表存在着互相约束的关系。所以我们可以先创建一个部门表,将manager字段设置为空。再去创建员工表,创建完员工表后,再反过来填入manager字段,即可完成创建。


http://www.ppmy.cn/ops/105418.html

相关文章

8.29 C++

作业 #ifndef CLASS_H #define CLASS_H #include <iostream> using namespace std; class Rect { private:int width;int height; public:void init(int w,int h);void set_w(int w);void set_h(int h);void show(); }; #endif // CLASS_H#include "class.h"v…

【无标题】使用Go (或者 Python) 执行外部命令,直接模式和 Shell模式的区别

有时&#xff0c;我们需要通过编程语言执行外部程序、命令或脚本。 Go 语言里提供了 “os/exec” 库&#xff0c;Python 里面也提供了 subprocess 这样的库。 但在具体调用外部命令时&#xff0c;有两种方式&#xff1a; 直接调用外部命令通过 Shell 调用外部命令 以 Go 语…

适配器模式(Adapter Pattern)

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许接口不兼容的类一起工作。适配器模式通过将类的接口转换为客户期望的另一个接口&#xff0c;使原本接口不兼容的类可以合作。 以下是一个简单的Java代码示例&#xff0c;演示如何使用…

初尝内核中断

每台计算机都连接有很多外设,那操作系统对这些外设进行管理时要如何通信呢?一般有轮询(Polling)和中断(Interrupt)两种,第一种是操作系统定时主动去查询这些外设,看有没有设备需要进行处理,而第二种则是外设需要处理时主动向操作系统发送请求信号,然后操作系统再做相…

Unity实战案例 2D小游戏HappyGlass(模拟水珠)

本案例素材和教程都来自Siki学院&#xff0c;十分感谢教程中的老师 本文仅作学习笔记分享交流&#xff0c;不作任何商业用途 预制体 在这个小案例中&#xff0c;水可以做成圆形但是带碰撞体&#xff0c;碰撞体比图形小一圈&#xff0c;顺便加上Trail renderer组件 材质 将碰撞…

ts类型体操笔记

ts类型体操笔记 一、infer关键字 1. infer 作用 用于推导泛型参数&#xff0c;并且infer的声明只能出现在extend子语句中 2. infer 用法 infer后面加变量名 例如&#xff1a;获取 Promise 返回的参数 interface User {name: stringage: number }type PromiseType Promi…

字节跳动一面

字节跳动一面【C后端开发】 base &#xff1a; 深圳 岗位&#xff1a;C后端开发 时间&#xff1a; 2024/8/30 文章目录 基本介绍C语言1. 堆栈内存是否连续&#xff0c;为什么&#xff1f;2. int i0; i ; 两个线程同时执行10000次&#xff0c;i最终的数值是多少&#xff1f;3.…

GD32F103单片机-概述和工程建立

GD32F103单片机-概述和工程建立 一、GD32F103单片机介绍1.1 GD32F103C8T6引脚1.2 GD32F103C8T6系统架构和启动配置1.3 GD32F103C8T6时钟树 二、GD32F103工程建立 一、GD32F103单片机介绍 GD32F103系列由是由国内公司兆易创新生产的基于Arm Cortex-M3处理器的单片机位数&#x…