文章目录
mysql数据库实验——建表准备
tips:在SQL中,所有的命令和关键字以及自定义名称都不区分大小写,但是强烈推荐:关键字部分使用全部大写,自定义名称(数据库名、数据库表名、字段名)用小写字母开头
!!!很牛很🐂的数据库大佬总结:mysql-朱双印博客-第4页 (zsythink.net)
1.dos界面中数据库的登录操作
1.win+R(cmd)进入dos界面
2.进入mysql安装目录中
tips:进入安装目录下首先启动数据库mysql服务:net start
服务名称
服务名称可在本机系统服务中查看(此电脑->管理->服务和应用程序->服务),这里我的是mysql80
#这里解决一个bug
发生意料之外的错误:
baidu+搜索:权限不够,以管理员模式启动cmd
-
运行mysql -u -root -p命令
-
输入root用户密码进入数据库服务
2.数据库及表格创建
(1)利用sql语句创建数据库DBtest
- CREATE DATABASE DBtest
@更加确切的创建方式
(判断是否重名创建,指定字符集,指定校对规则)
CREATE DATABASE [IF NOT EXISTS] <数据库名>
[[DEFAULT] CHARACTER SET <字符集名>]
[[DEFAULT] COLLATE <校对规则名>];
CREATE DATABASE IF NOT EXISTS DBtest
DEFAULT CHARACTER SET utf8mb4
DEFAULT COLLATE utf8mb4_0900_ai_ci;
创建之后利用**show databases
**命令查看当前所有数据库
**SHOW CREATE DATABASE
**查看数据库的定义声明
(2)表格创建
1.依据本地表格文件DBtest.xls
创建数据库表格
利用sql语句结合表格所考虑到的完整性约束
CREATE TABLE stu_scores(
studentID varchar(10)PRIMARY KEY,/*学号为主码*//*此处引发下面的bug*/
schoolyear varchar(20),
id_course varchar(20)UNIQUE,/*课程号取唯一值*//*后续更改后为主码*/
name_course varchar(30),
nature_course varchar(20),
value_course double,
score_course double,
grade_point double
);
使用show columns from stu_scores
语句查看已创建的表格列属性
也可在mysql-front中创建关联数据库dbtest的账号查看表格属性
3.导入数据至数据据库中
-
要点:
1.需要在数据库中事先创建好表和表结构,应该和excel的结构一样
2.先把本地DBtest.xls另存为.csv文件,再将此文文件在记事本中打开,另存为.txt文件
CSV(逗号分隔值文件格式)_百度百科 (baidu.com)
3.执行该语句
LOAD DATA LOCAL INFILE'E:\DBtest.txt' INTO TABLE stu_scores FIELDS TERMINATED BY ',' LINES TERMINATED BY '\r\n' IGNORE 1 LINES;
INFILE
后面跟文件路径,TERMINATED BY
指数据分隔方式,LINES TERMINATED BY
指行的分隔方式,- windows换行是\r\n,十六进制数值是:0D0A。
LINUX换行是\n,十六进制数值是:0A
GNORE 1 LINES
忽略第一行(由于txt文件头是对应的excel的表头将其忽略) - windows换行是\r\n,十六进制数值是:0D0A。
**tips:**ctrl+[ 格式化上面段落的格式继承
#这里解决一个bug
在使用这段命令时候报错:ERROR 1148 (42000): The used command is not allowed with this MySQL version
一番搜索:
tips😥点击链接跳转要按住ctrl
原因分析:
根据官方的解释是mysql在编译的时候默认把local-infile的参数设为0,就是关闭了从本地load的功能,所以如果需要使用只能自己打开
-
很多类似的都是方案一的解决手法,在连接自己的mysql服务时候用此命令启动:mysql -u root --local-infile=1 -p(本机测试无用)
-
方案二中提供如下方式
亲测有用
先使用命令**SHOW GLOBAL VARIABLES LIKE 'local_infile'
**查看一下当前==local_infile==状态
不出所料,off
然后使用命令**SET GLOBAL local_infile=true
**更改标识
然后再次尝试加载本地DBtest.txt(感觉上应该没问题,但是!)
#这里解决一个bug
跳过了47条记录
使用**SELECT* FROM stu_scores
**查询结果如下:
同样学号数据仅仅出现一次
于是联想到前面我们将studentID
设置为了主码
PRIMARY KEY:指示某一列为表的主码,是==非空且唯一==的
那么也就可以猜想,加载数据时候读取到一个学号之后,那么后续此学号开头的元组也就全部被过滤掉了
使用命令
ALTER TABLE stu_scores
DROP PRIMARY KEY;
取消主码约束
然后使用**show columns from stu_scores;
**
此时studentID
已取消主码约束,Key部分未显示任何值
然后清空刚才录入错误的表格
1.truncate table table_name;
2.delete from table_name;
//两者均可但稍有不同
详见:mysql – 清空表中数据 - ma_fighting - 博客园 (cnblogs.com)
这里尤其注意不能用drop语句,drop直接将表删除而不是清空
若使用drop后果如下
再次录入本地DBtest.txt(呜呜~finally)
aaaaaaaaa
get it!!!
通过mysql-front细看如下
成功导入!
#一点小瑕疵更改
- 第二个学生学号为2,试着将它改为1,看着齐整一点
这里就涉及到数据更新
UPDATE stu_scores
SET studentID='1'
WHERE id_course="4120348171";
修改成功!
基于dbtest.stu_scores的数据库实验
实验一 数据库管理系统(DBMS)实验
1)熟悉DBMS的界面和操作
本次实验采用mysql数据库,结合mysql-front实现,界面及使用已悉知
2)创建数据库和查看数据库属性
上述已创建数据库dbtest
,
这里扩展一下创建数据库命令
CREATE {
DATABASE|SCHEMA}[IF NOT EXISTS] dbname [create_specification]
//对于create_specification的解释
create_specification:
[DEFAULT] CHARACTER SET [=] charset_name