1、实验目的
理解和掌握数据库DDL语言,能够熟练地使用SQL DDL语句创建、修改和删除数据库、模式和基本表。
2、实验内容及要求
理解和掌握SQL DDL语句的语法,特别是各种参数的具体含义和使用方法;使用SQL语句创建、修改和删除数据库、模式和基本表。掌握SQL语句常见语法错误的调试方法。
3、实验步骤
建立TPC-H数据库模式,TPC-H数据库模式由零件表(Part)、供应商表(Supplier)、零件供应商联系表(PartSupp)、顾客表(Customer)、国家表(Nation)、地区表(Region)、订单表(Orders)和订单明细表(Lineitem)8个基本表组成。
零件表(Part) 供应商表(Supplier) 顾客表(Customer)
|
|
|
零件供应商联系表(PartSupp) 国家表(Nation) 地区表(Region)
|
|
|
订单表(Orders) 订单明细表(Lineitem)
|
|
- 采用SQL语句练习数据表的创建,创建基本表时,要求为列选择合适的数据类型,正确创建表级和列级完整性约束,如列值是否允许为空、主码和外码等(注意:由于完整性约束的限制,被引用的表需要先创建);
(2)我是使用sqlyog进行数据库的创建 删除 数据增删改查 有些sqlyog内能用的语句好像在sqlquery内无法使用,我不太清楚为什么 以下是我的实验报告内容。
#创建数据库
CREATE DATABASE IF NOT EXISTS TPCH;
USE TPCH;
#删除数据库 删除数据库(这里我用的是# 我用的sqlyog 不知道为什么#再sqlQuery内无法使用)
#DROP DATABASE IF EXISTS tpch;
#创建各种表 (不知道为什么 if not exists 和 主键递增AUTO_INCREMENT 再sqlQuery内无法使用)
CREATE TABLE IF NOT EXISTS Part
(
partkey INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
mfgr VARCHAR(20),
brand VARCHAR(20),
TYPE VARCHAR(20),
size INT,
container VARCHAR(20),
retailprice DOUBLE,
COMMENT VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS Supplier
(
suppkey INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
address VARCHAR(20),
nationkey VARCHAR(20),
phone VARCHAR(20),
acctbal INT,
COMMENT VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS Customer
(
custkey INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
address VARCHAR(20),
nationkey VARCHAR(20),
phone VARCHAR(20),
acctbal INT,
mktsegment VARCHAR(20),
COMMENT VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS Nation
(
nationkey INT PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
regionkey VARCHAR(20),
COMMENT VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS Region
(
regionkey INT(20) PRIMARY KEY AUTO_INCREMENT,
NAME VARCHAR(20),
COMMENT VARCHAR(20)
);
CREATE TABLE IF NOT EXISTS Lineitem
(
Lineitem INT PRIMARY KEY AUTO_INCREMENT,
partkey VARCHAR(20),
suppkey VARCHAR(20),
linenumber VARCHAR(20),
quantity VARCHAR(20),
extendedprice INT,
discount VARCHAR(20),
tax VARCHAR(20),
returnflag VARCHAR(20),
linestatus INT,
shipdate VARCHAR(20),
commitdate VARCHAR(20),
receiptdate VARCHAR(20),
shipinstruct VARCHAR(20),
shipmode VARCHAR(20),
COMMENT VARCHAR(20)
);
CREATE TABLE Orders
(
orderkey INT PRIMARY KEY AUTO_INCREMENT,
custkey VARCHAR(20),
orderstatus VARCHAR(20),
totalprice VARCHAR(20),
orderdate DATE,
orderpriority INT,
clerk VARCHAR(20),
shippriority INT,
COMMENT VARCHAR(20)
);
CREATE TABLE PartSupp
(
partkey INT PRIMARY KEY AUTO_INCREMENT,
suppkey VARCHAR(20),
availqty VARCHAR(20),
supplycost VARCHAR(20),
COMMENT VARCHAR(20)
);
数据信息的添加
#向nation添加数据
INSERT INTO nation VALUES('1', '北冰洋汽水', 32, '无');
INSERT INTO nation VALUES('2', '雷碧汽水', 12, '可乐');
INSERT INTO nation VALUES('3', '老北京汽水', 35, '无');
INSERT INTO nation VALUES('4', '可乐汽水', 66, '无');
INSERT INTO nation VALUES('', '拜四汽水', 22, '无');
INSERT INTO nation VALUES('', '油卡汽水', 3, '无');
数据的删除
#删除nation数据 ID为1
DELETE FROM nation WHERE nationkey='1';
截图
数据的修改
# 修改数据
UPDATE nation SET NAME='修改过的', COMMENT='修改过的' WHERE nationkey='2';
数据的查询
#查询数据 id=2
SELECT nationkey,NAME,regionkey,COMMENT
FROM nation
WHERE nationkey='2';
4、实验小结
通过这次实验,我收获了许多关于数据库的知识,熟悉了sql server工具的使用。首先,在创建表时,一开始我将表名设置为TCP-H,但运行发现不通过,我向老师询问了这个问题,老师告诉我尝试将TCP-P中的-删除,试过之后发现运行通过,我又尝试加上双引号“”,发现也可以通过,于是,我了解了数据库命名规范。
在接下来的实验中,我又遇到了错误,经过观察,原来是之前写过的创建数据库的语句需要删除或者注释掉,否则就会报错,因为语句重复使用了。同时,我也学会了如何注释,单行注释加--,多行注释为/*…….*/。另外注释语句的快捷键为Ctrl+K、Ctrl+C,取消注释为Ctrl+k、Ctrl+u。
在创建过表后,需要刷新数据库才可以看到已创建的表,创建表也可以不使用sql语句创建。在创建各个表时,我发现任务比较繁琐重复,效率比较低,这时朱老师告诉我们可以使用excel表导入表格,这真是个好方法,可惜由于时间有限,我没能尝试。
总之,经过这次实验,我基本理解和掌握SQL DDL语句的语法,学会了使用SQL语句创建、修改和删除数据库、模式和基本表。在遇到常见的语法错误也能自己发现并解决了。但是我还有很多没有涉及的地方,需要进一步的学习才能提高自己的能力,今后也会更加专注的学习数据库。