实验一 数据库定义实验

实验名称:实验1 数据库定义实验

实验目的和要求:

一、实验目的和要求

理解和掌握数据库DDL语言,能够熟练地使用SQL,DDL语言创建、修改和删除数据库、模式和基本表

实验软硬件要求:

计算机、MySQL,Navicat

实验内容、实验过程、所遇问题及其解决方法

  • 实验内容:

理解和掌握SQL、DDL语句的语法,特别是各种参数的具体含义和使用方法;使用SQL语句创建、修改和删除数据库、模式和基本表。掌握SQL语句常见的语法错误的调试方法

  • 实验过程

1)创建数据库

在本地数据库下新建查询,采用中文字符集创建名为 TPCH 的数据库。mysql会报错,删除ENCODING = 'GBK ',创建完数据库后再更改其编码格式即可

2)创建模式

在数据库TPCH中创建名为Sales 的模式。

3)创建数据库表

在TPCH数据库的 Sales模式中创建8个基本表

一、代码:

CREATE TABLE Region(

regionkey INTEGER PRIMARY KEY,

name CHAR(25),

comment VARCHAR(152)

);

CREATE TABLE Nation(

nationkey INTEGER PRIMARY KEY,

name CHAR(25),

regionkey INTEGER REFERENCES Region(regionkey),

comment VARCHAR(152)

);

CREATE TABLE Supplier(

suppkey INTEGER PRIMARY KEY,

name CHAR(25),

address VARCHAR(40),

nationkey INTEGER REFERENCES Nation(nationkey),

phone CHAR(15),

acctbal REAL,

comment VARCHAR(101)

);

CREATE TABLE Part(

partkey INTEGER PRIMARY KEY,

name VARCHAR(55),

mfgr CHAR(25),

brand CHAR(10),

type VARCHAR(25),

size INTEGER,

container CHAR(10),

retailprice REAL,

comment VARCHAR(23)

);

CREATE TABLE PartSupp(

partkey INTEGER REFERENCES Part(partkey),

suppkey INTEGER REFERENCES Supplier(suppkey),

availqty INTEGER,

supplycost REAL,

comment VARCHAR(199),

PRIMARY KEY(partkey,suppkey)

);

CREATE TABLE Customer(

custkey INTEGER PRIMARY KEY,

name VARCHAR(25),

address VARCHAR(40),

nationkey INTEGER REFERENCES Nation(nationkey),

phone CHAR(15),

acctbal REAL,

mktsegment CHAR(10),

comment VARCHAR(117)

);

CREATE TABLE Orders(

orderkey INTEGER PRIMARY KEY,

custkey INTEGER REFERENCES Customer(custkey),

orderstatus CHAR(1),

totalprice REAL,

orderdate DATE,

orderpriority CHAR(15),

clerk CHAR(15),

shippriority INTEGER,

comment VARCHAR(79)

);

CREATE TABLE Lineitem(

orderkey INTEGER REFERENCES Orders(oderkey),

partkey INTEGER REFERENCES Part(partkey),

suppkey INTEGER REFERENCES Supplier(suppkey),

linenumber INTEGER,

quantity REAL,

extendedprice REAL,

discount REAL,

returnflag CHAR(1),

linestatus CHAR(1),

shipdate DATE,

commitdate DATE,

receiptdate DATE,

shipinstruct CHAR(25),

shipmode CHAR(10),

comment VARCHAR(44),

PRIMARY KEY(orderkey,linenumber),

FOREIGN KEY(partkey,suppkey)REFERENCES PartSupp(partkey,suppkey)

);

二、视图:

  • 表Region

  • 表Nation

 

  • 表Supplier

  • 表Part

  • 表Partsupp

  • 表Customer

  • 表Orders

 

  • 表Lineitem

 

三、遇到的问题与解决的方法

问题:用代码的形式创建表时定义了外键约束,包括单个外键和组合外键,但是在设计表的界面里查看外键约束却找不到,同时填写数据时本该有外键约束的那一栏也没有下拉箭头,奇怪的是组合外键没有这两个问题;

解决方法:即使在数据库查询中定义了单个外键,也需要在图形界面中确认是否已创建相应的外键约束。如果没有创建,需要手动添加外键约束来确保数据的完整性和一致性。同时,如果图形界面只显示了组合外键约束,而没有显示单个外键约束,也不必过于担心,因为组合外键约束已经包含了单个外键约束的限制条件。

问题:使用另一种方法创建表(即在图形界面手动设置各表数据),添加和删除外键时,经常出现失败的情况。

解决方法:①需要注意的是创建外键时,内码和外码的名称和数据格式必须保持一致,外键必须引用另一个表中的主键或唯一约束,而不是必须引用主键。主键是一种唯一性约束,但是一个表中可以有多个唯一性约束。如果外键引用的是另一个表中的唯一约束,则也可以起到保证数据完整性和一致性的作用。②如果外键约束被其他表、视图、约束等对象引用,则无法直接删除该外键约束。需要先删除引用该外键约束的其他对象,然后再删除该外键约束。

实验总结及心得体会:

①在数据库定义实验中,我学习了如何使用SQL语言来创建和管理数据库,包括表的创建、数据类型的选择、约束的定义、索引的创建等。通过实验的过程,我深刻地认识到了数据库在现代信息系统中的重要性,以及如何通过SQL语言来操作数据库。

②在实验过程中,我遇到了一些问题,例如语法错误、约束冲突、数据类型选择不当等,但通过不断地尝试和调试,最终都得到了解决。这让我更加深入地理解了SQL语言的特点和使用方法,并且提高了我的调试和问题解决能力。

③数据库定义实验让我深入了解了SQL语言和数据库的基础知识,同时也提高了我的实际操作能力和问题解决能力。这对我今后的学习和工作都有很大的帮助。

思考题:

一、在SQL语言中,通常使用双引号(")或方括号([])来界定对象名,例如表名、列名等。使用双引号或方括号界定对象名,可以避免对象名与SQL关键字冲突,同时也可以支持特殊字符和大小写敏感。

下面是一些情况下使用双引号界定对象名的例子:

  1. 对象名包含空格或特殊字符:如果对象名包含空格或特殊字符,例如空格、下划线、感叹号等,需要使用双引号界定对象名。例如,如果有一个表名为"my table",需要使用双引号来界定该表名,例如"my table"。

  2. 对象名与SQL关键字冲突:如果对象名与SQL关键字冲突,需要使用双引号界定对象名。例如,如果有一个列名为order,需要使用双引号来界定该列名,例如"order"。

  3. 对象名区分大小写:如果对象名区分大小写,需要使用双引号界定对象名。例如,如果有一个表名为MyTable,需要使用双引号来界定该表名,例如"MyTable"。

需要注意的是,使用双引号界定对象名可能会导致一些问题,例如跨数据库平台的兼容性问题、使查询语句难以阅读和维护等。因此,在使用双引号界定对象名时,需要谨慎考虑,并尽量避免使用特殊字符和关键字作为对象名。

  • 5
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值