数据库系统SSD7实验1《数据库与表的基本操作》

一、实验目的

1.熟练掌握一种DBMS的使用方法,完成数据库的创建、删除和连接;数据表的建立、删除;表结构的修改。
2. 加深对表的实体完整性、参照完整性和用户自定义完整性的理解。

二、实验内容

在以下实验中,使用学生-课程数据库,它描述了学生的基本信息、课程的基本信息及学生选修课程的信息。用SQL语句分别完成。
1.创建学生-课程数据库,数据文件名为student_data、大小10M,日志文件名为student_log、大小5M的新数据库,该数据库名为student_xxxxxx,xxxxxx表示班级学号。1801班12号,数据库名为student_180112。
2.创建学生关系表S :

学号姓名性别年龄所在系
SnoSnameSsexSagesdept

3.创建课程关系表C :

课程号课程名先行课学分
CnoCnameCpnoccredit

4.创建学生-课程表SC :

学号课程号成绩
SnoCnograde

5.将以上创建表S、C、SC的SQL命令以 .SQL文件的形式保存在磁盘上。在表中加入至少4个元组,第一个为本人信息。
6.在表S上增加“出生日期”与“身高”属性列。
7.删除表S的“身高” 属性列。
8.备份数据库,再还原。

三、实验方法与实验步骤

工具:VS Code(编写SQL文件)、Windows PowerShell(执行代码)、Navicat Premium(数据可视化,检验结果正确性)、命令行(导出备份文件)
1~5:通过VS Code写SQL文件,在PowerShell中运行sql文件。
运行语句为:source 【路径】
6、7:通过mysql下的命令输入SQL语句直接操作,
运行语句为alter table 【表名】add/drop …
8:通过命令行进行操作
运行语句为

mysqldump --column-statistics=0 -u root -p student_190515 C S SC >【路径】

四、实验结果

创建数据库:create database student_*****;
创建表:
create.sql

create table S
    (Sno numeric(15),
     Sname varchar(7),
     Ssex varchar(7),
     Sage numeric(3,0),
     sdept varchar(20)
     );

create table C
    (Cno numeric(15),
     Cname varchar(30),
     Cpno varchar(30),
     ccredit numeric(3,2)
    );

create table SC
    (Sno numeric(15),
     Cno numeric(15),
     grade numeric(5, 2)
    );

插入内容:
insert.sql

insert into S
values(***, '***', 'male', 18, 'Software Engineering'),
      (***, '***', 'male', 19, 'Software Engineering'),
      (***, '***', 'female', 20, 'Software Engineering'),
      (***, '***', 'male', 18, 'Software Engineering');

insert into C
values(01, 'Compilation Principle', 'C++', 3),
      (02, 'SSD7','',3),
      (03, 'Operating System Principle', 'C++', 3),
      (04, 'Advanced English', 'Basic English', 3);

insert into SC
values(***, 01, 100),
      (***, 02, 100),
      (***, 03, 100),
      (***, 04, 100);

Navicat显示:
S
在这里插入图片描述

C
在这里插入图片描述
SC
在这里插入图片描述
(寄托了我对我成绩的期望)
增加属性:
1’ alter table S add Sbirthday date after Sage;
2’ alter table S add Sheight numeric(5, 1) after Sbirthday;
在这里插入图片描述
删除属性:
在这里插入图片描述
备份:
mysqldump --column-statistics=0 -u root -p 【数据库名】C S SC >【路径】
产生的文件:(不附了:))

五、实验小结

遇到的问题:
①在运行sql文件时,出现
ERROR:
Unknown command ‘\S’.
ERROR:
Unknown command ‘\e’.
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘reate.sql’ at line 1
通过查询和观察发现错误为’\’会连带后面的字符导致不能识别,也就是识别反斜杠的问题。于是将命令中的反斜杠改为’/’,就解决了问题。

②在分别执行两次改变表格内容的语句:
1’ alter table S add Sbirthday date after Sage;
2’ alter table S add Sheight numeric(5, 1) after Sbirthday;
之后,打开Navicat查看发现表的属性顺序并不是想要的
Sage->Sbirthday->Sheight:
在这里插入图片描述
而在删除Sheight行之后,变成了这样(Sbirthday被显示在后面):
在这里插入图片描述
思考认为可能只是Navicat的显示问题,于是重新执行,在命令行查看结果:
初始态
在这里插入图片描述
执行

alter table S add Sbirthday date after Sage;
alter table S add Sheight numeric(5, 1) after Sbirthday:

在这里插入图片描述
可以看到,顺序是正确的(SageSbirthdaySheight)
执行alter table S drop Sheight:
在这里插入图片描述
变为正常的了。
③在导出.sql文件时:首先尝试

mysqldump -u [username ]-p [dbname] [table1] [table2]...>[BackupName].sql;

dbname:要备份数据库的名称;
table1和table2参数表示的是需要备份的数据库表的名称,假如为空则表示需要备份整个数据库;
BackupName.sql表示的是将数据库备份到指定的.sql文件中,这个文件的前面可以执行一个详细的绝对路径;

但是报错

mysqldump: Couldn’t execute ‘SELECT COLUMN_NAME, JSON_EXTRACT(HISTOGRAM, ‘$.“number-of-buckets-specified”’) FROM information_schema.COLUMN_STATISTICS WHERE SCHEMA_NAME = ‘student_190515’ AND TABLE_NAME = ‘c’;’: Unknown table ‘column_statistics’ in information_schema (1109)

查询发现是因为新版的mysqldump默认启用了一个新标志,通过- -column-statistics=0来禁用它
于是改变语句为:mysqldump --column-statistics=0 -u [username] -p [dbname] > [backUp].sql
就成功导出了文件。
④导入sql文件时提示:ERROR:

ASCII ‘\0’ appeared in the statement, but this is not allowed unless option --binary-mode is enabled and mysql is run in non-interactive mode. Set --binary-mode to 1 if ASCII ‘\0’ is expected. Query: ‘ÿþ-’.

上网搜索发现,是使用Windows PowerShell导致的问题。于是使用命令行重新导出,再导入时就可以完全正常。在涉及sql导出的时候,不要使用PowerShell。
实验总结:通过本次实验,了解到了数据库的建立、对表的一些基本操作,是DDL中重要的部分。同时,也学会了数据库的备份(导出sql文件),可以有效防止数据丢失。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值