实验目的
理解和掌握数据库 DDL 语言,能够熟练使用 SQL DDL 语句,并能够完成数据导入。
实验内容和要求
理解和掌握 SQL DDL 语句的语法,特别是各种参数的具体含义和使用方法,使用 SQL语句创建、修改和删除基本表,掌握 SQL 语句常见语法错误的调试方法,完成数据导入。
实验步骤
(1)使用菜单命令创建一个数据库 test。
(2)在数据库 test 上使用 SQL 语句按照所给表的顺序定义下列基本表。
(3)根据给的“数据导入教程.rar”,把每个表的数据(.csv 格式)导入到建立的表里,导入顺序按照建表的顺序。
(4)用 SQL 语句给订单表(orders)创建一个索引(按订单日期降序),索引的名字是Dindex。
SQL语句
创建数据库test和8个表:
CREATE TABLE region ( regionkey INT PRIMARY KEY auto_increment, NAME CHAR ( 25 ), COMMENT VARCHAR ( 150 ) );
CREATE TABLE nation (
nationkey INT PRIMARY KEY auto_increment,
NAME CHAR ( 25 ),
regionkey INT,
COMMENT VARCHAR ( 150 ),
FOREIGN KEY ( regionkey ) REFERENCES region ( regionkey )
);
CREATE TABLE supplier (
suppkey INT PRIMARY KEY auto_increment,
NAME CHAR ( 100 ),
address VARCHAR ( 100 ),
nationkey INT,
phone CHAR ( 30 ),
acctbal DECIMAL ( 12, 2 ),
COMMENT VARCHAR ( 100 ),
FOREIGN KEY ( nationkey ) REFERENCES nation ( nationkey )
);
CREATE TABLE part (
partkey INT PRIMARY KEY auto_increment,
NAME VARCHAR ( 100 ),
mfgr CHAR ( 50 ),
brand CHAR ( 50 ),
type VARCHAR ( 25 ),
size INT,
container CHAR ( 10 ),
retailprice DECIMAL ( 8, 2 ),
COMMENT VARCHAR ( 20 )
);
CREATE TABLE partsupp (
partkey INT,
suppkey INT,
availqty INT,
supplycost DECIMAL ( 10, 2 ),
COMMENT VARCHAR ( 200 ),
PRIMARY KEY ( partkey, suppkey ),
FOREIGN KEY ( partkey ) REFERENCES part ( partkey ),
FOREIGN KEY ( suppkey ) REFERENCES supplier ( suppkey )
);
CREATE TABLE customer (
custkey INT PRIMARY KEY auto_increment,
NAME VARCHAR ( 25 ),
address VARCHAR ( 40 ),
nationkey INT,
phone CHAR ( 30 ),
acctbal DECIMAL ( 12, 2 ),
mktsegment CHAR ( 10 ),
COMMENT VARCHAR ( 100 ),
FOREIGN KEY ( nationkey ) REFERENCES nation ( nationkey )
);
CREATE TABLE orders (
orderkey INT PRIMARY KEY auto_increment,
custkey INT,
orderstatus CHAR ( 1 ),
totalprice DECIMAL ( 10, 2 ),
orderdate DATE,
orderpriority CHAR ( 15 ),
clerk CHAR ( 16 ),
shippriority CHAR ( 1 ),
COMMENT VARCHAR ( 60 ),
FOREIGN KEY ( custkey ) REFERENCES customer ( custkey )
);
CREATE TABLE lineitem (
orderkey INT,
partkey INT,
suppkey INT,
linenumber INT,
quantity INT,
extendedprice DECIMAL ( 8, 2 ),
discount DECIMAL ( 3, 2 ),
tax DECIMAL ( 3, 2 ),
returnflag CHAR ( 1 ),
linestatus CHAR ( 1 ),
shipdate DATE,
commitdate DATE,
receiptdate DATE,
shipinstruct CHAR ( 25 ),
shipmode CHAR ( 10 ),
COMMENT VARCHAR ( 10 ),
PRIMARY KEY ( orderkey, linenumber ),
FOREIGN KEY ( orderkey ) REFERENCES orders ( orderkey ),
FOREIGN KEY ( partkey, suppkey ) REFERENCES partsupp ( partkey, suppkey )
);
用SQL语句给订单建立日期降序索引:
CREATE INDEX Dindex ON orders ( orderdate DESC );
实验结果
创建数据库test和8个表:
按顺序把数据导入8个表中:
region表:
nation表:
supplier表:
part表:
partsupp表:
customer表:
orders表:
lineitem表:
在orders表中添加降序索引Dindex:
实验总结
(1)导入数据时需要选择合适的编码格式,我选择Current Windows CodePage时总是出现以下错误:
后来改为10008 (MAC - Simplified Chinese GB 2312)之后就可以导入了。
(2)在数据导入时,可能会出现其他步骤没有错误但导入失败的情况,只要选择忽略外键约束就可以正常导入了。