发表于: 2022-07-27 09:16:06
1 572
今天完成的事情:
0.更改字段类型:
根据辅导师兄的建议结合网络搜索,确认MySQL中的Bigint字段类型在有符号的情况下与Java的Long类型取值范围一致,会被mybatis映射为Long类型。
故此将ID、Create_At、Update_At、Join_Time这四个字段的类型修改为Bigint类型。
1.学习MySQL 8.0 Command的使用:
首先在Navicat上通过连接测试验证了数据库服务处于开启状态,没有出现昨天电脑重启后数据库服务处于关闭的情况。
根据网络搜索学习MySQL命令行的使用,比如查看数据库 show databases; 、连接数据库 use database_name; 、查看表结构 DESCRIBE table_name; 等操作。成功在命令行内看到了昨天创建的表的结构。
2.学习SQL插入语句的使用并向表中插入数据:
根据网络资料学习在MySQL Command中使用SQL语句,通过MySQL创建新数据库和新表用于学习和实践。
SQL语句[创建数据库]:
CREATE DATABASE database_name;
SQL语句[删除数据库]:
DROP DATEBASE database_name;
SQL语句[创建数据表]:
CREATE TABLE IF NOT EXISTS `table_name`(
`column_name1` column_type,
`column_name2` column_type,
`column_name3` column_type,
PRIMARY KEY (`column_name1`)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
注意使用反单引号。
SQL语句[删除数据表]:
DROP TABLE table_name;
SQL语句[向表插入数据]:
INSERT INTO table_name
(field1, field 2, field 3…fieldN)
VALUES
(value1, value2, value3…valueN);
本质一句话,便于阅读而拆分成许多行,MySQL也支持此操作,直到分号才会判定语句结束。
至此认为“向表中插入数据”相关的语句知识已完备,并在自建的新表中实践确认自己的理解无误。开始尝试向昨天创建的业务表`student_info`插入信息。
考虑到对创建时间等需要精确到秒的字段手动输入数据过于繁琐,根据网络资料决定调用函数now()来获取系统当前时间。
插入语句以上文为例,表名、列名以及值进行对应更替即可插入成功后进入navicat查看,发现表确实新增了一行数据,值与插入语句输入的值相同无误。
3.学习SQL查询语句的使用并以姓名查询刚刚插入的记录:
SQL语句[查询表中数据]:
SELECT column_name1, column_name2 FROM table_name [WHERE Clause][LIMIT N][OFFSET M] ;
从table_name表中查询column_name1等列的值,后面的[]是子句,可以根据实际情况进行添加。比如where可以指定查询条件,limit n是查询n条记录,limit m, n 是从第m条记录开始查询n条记录,offset m是跳过m条记录再查询。
当使用符号 * 代替列名时,会从表中检索所有记录。
任务要求是根据姓名查询插入的记录,我判断可以使用where子句。WHERE子句可用的运算符有=、<>(不等于,部分SQL版本可以写做!=)、>、<、>=、<=、BETWEEN、LIKE、IN、AND、OR等。
因为在MySQL Command与Navicat之间来回切换的操作略显繁琐,根据网络资料,开始在Navicat内通过命令行界面操作SQL语句。
在Navicat的数据库命令行界面输入SELECT * FROM student_info WHERE name = '朱春雨'; 完成按照姓名查询之前插入的记录。
4.学习SQL修改语句并以此将立愿(Failure_Penalty)内的数据修改:
任务要求是Navicat和SQL各使用一次进行修改,使用Navicat修改只要更改对应字段框内文本再保存即可,故此着重于使用SQL语句修改。
SQL语句[修改表中数据]:
UPDATE table_name SET field1 = newvalue1, field2 = newvalue2 [WHERE Clause];
可以更新一或多个字段,也可以追加WHERE子句指定更新条件。
值得注意的是,UPDATE在使用时最好追加WHERE子句,因为不使用WHERE限制就进行更新的话会影响到field1列内的所有数据。
在Navicat的数据库命令行界面输入 UPDATE student_info SET Failure_Penalty = '老大最帅' WHERE Name = '朱春雨';
系统提示完成更新,之后用 SELECT * FROM student_info; 语句确认立愿(Failure_Penalty)字段的数据记录确实已经被修改为“老大最帅”。返回Navicat界面查看成果。
第一条是直接使用Navicat修改,第二条使用SQL语句修改。
5.将表导出为SQL文件,将此条数据删除再用备份的SQL文件恢复:
根据网络资料完成了表的导出,在Navicat的具体表名中右键单击然后选择“转储SQL文件”->“结构和数据”即可以SQL格式导出表。
在Navicat的表界面内,右键点击字段最前端的小三角形,选择菜单的“删除记录”即可将之前添加的一条数据记录删除。
退出表界面,在Navicat的“表”上右键,点击右键菜单中的“运行SQL文件”,选择之前导出的SQL文件,完成后要点击右键菜单中的“刷新”。再打开表后发现数据记录还原了。
“导出”->“删除”->“导入”->“恢复”的四个步骤都没有问题,开始尝试用MySQL删除数据记录再导入SQL文件恢复数据。
SQL语句[删除表中数据]:
DELETE FROM table_name [WHERE Clause];
注意,如果没有WHERE子句进行限定,表中所有的数据记录都会被DELETE删除!
在Navicat的数据库命令行界面输入 DELETE FROM student_info WHERE Name = '朱春雨'; 。
系统提示完成更新,之后用 SELECT * FROM student_info; 语句确认只删除了一条记录。
重复之前导入SQL文件的步骤,完成数据的恢复。
明天计划的事情:
(1)学习索引相关的知识,给姓名字段建立索引,思考哪些字段还需要索引。
(2)插入10条数据比较有索引和无索引时SQL语句执行的效率。
(3)深度思考MySQL相关的问题。
(4)下载安装JAVA7。
(5)下载安装Maven3。
(6)下载安装IDEA。
遇到的问题:
(1)在学习SQL语法时尝试创建测试用的表时有报错“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 ''runoob_tbl'' at line 1”,经过网上查阅得知此处错误是语法错误。
在MySQL中对于反单引号“`”和单引号“’”有严格区分,列名应使用反单引号,键值才是用单引号。把表名的单引号改为反单引号后创建成功。
(2)向表中插入数据时报错ERROR 1136 (21S01): Column count doesn't match value count at row 1,经由网络搜索确认此错误的成因是“字段名与值不匹配”,检查后发现是自己的值比字段少了一个。
回看数据来源发现是作为数据原型的回帖本身就有一个关于“毕业院校”的字段内容没有填写,更换数据原型为内容完备的回帖后此问题解决,数据成功插入。
收获:
(1)数据库SQL语句中对于反单引号“`”和单引号“’”的使用要慎重,适应不当的话在创建表阶段和插入数据阶段都会有频繁报错。
(2)搜索网络资料的多方对比尤其重要,关于MySQL的SQL语句使用,我找到的第一种教程没有提及UPDATE不使用WHERE子句进行限制时的危险性,对于网络资料以要以审视态度多方对比,而不是一股脑接收。
(3)学习数据库基础增删查改方面SQL语句的使用,大致了解如何使用Navicat,掌握了对数据库表文件以SQL格式导出导入的操作。
评论