前言
最近在脑袋里咕噜咕噜转的一个问题是:以 ChatGPT 为代表的生成式 AI 到底在多大程度上、怎样的方式上能帮助人们学习计算机程序设计、数据库等知识。想多了那就不如自己动手试试。
在当年还是 Microsoft VB 6.0 年代,我自己曾经做过一些 Microsoft Access 数据库的开发,以及用到数据库的基于 ASP.NET 的动态网页开发,不过都是很浅显的项目。而当年所学的关系型数据库的原理那门课,基本上在每次下课铃声响起时,那些非常理论化的概念——什么约束原则啦,规范啦,原子性啦——都还给了老师。而自从我使用 MacOS 以及 Linux 操作系统以来,一直把它们当作文书办公电脑的环境而非开发环境在用。所以自然也就知道但印象里自己没用过以终端命令行来操作 SQLite 数据库。今天,我就花了大概一个小时,让 ChatGPT 来教我如何在 MacOS 上入门使用 SQLite 。
在下面的这一部分,我会简略地介绍我的这一学习过程,而在本文最后一部分,我将从自己今天这次简短的学习过程,探讨一下借助 AI 的学习指导的形式转换。
教学过程概况再现
在尝试之前,我担心安装或操作 SQLite 会不会影响我 MacOS 的系统环境变量。毕竟是我现在的主用电脑,我可不想因为装了什么环境而导致把整个系统弄乱。
对此,ChatGPT 答:
在macOS上使用SQLite 3进行数据库操作时,不会影响系统环境变量或系统设置。
SQLite 3是一个独立的应用程序,它默认情况下不会修改系统环境变量或影响macOS的系统配置。它的操作都是在你指定的数据库文件上进行的,不会涉及到系统本身的环境设置。因此,你可以放心地在本地使用SQLite进行数据库操作,而不用担心会破坏系统环境。
具体来说:
- SQLite的操作是文件级别的:当你创建或打开一个数据库时,它只会在你指定的目录下创建一个数据库文件(例如
example.db
),所有的操作(例如创建表、插入数据、查询等)都只会影响这个数据库文件。- SQLite不会修改系统文件:SQLite不需要修改系统文件或系统设置来运行。因此,无论你创建、修改、还是删除数据库文件,都不会影响macOS的操作系统本身。
- 环境变量不会被影响:SQLite运行时不依赖特定的环境变量,使用它的命令行工具也不会导致环境变量的更改。你可以随时关闭终端或退出SQLite命令行工具,不会留下任何对系统环境的持久性影响。
建议
如果你仍然担心可能的风险,可以考虑以下措施:
- 备份:在进行数据库操作前备份重要的文件或数据,虽然SQLite本身不太可能影响系统,但备份是个好习惯。
- 虚拟机使用:你可以继续在虚拟机中使用SQLite,这样即使出问题,也不会影响你的主机环境。
- 测试环境:如果你正在学习或测试SQLite,可以使用单独的测试目录来保存数据库文件,这样可以避免误操作导致的数据丢失。
总的来说,使用SQLite是非常安全的,它设计上就是一个轻量级、独立的数据库系统,不会对你的系统环境产生不良影响。
并且, ChatGPT 向我展示了一个很初级的新建数据表的命令:
CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT, age INTEGER);
此时,我想到一个问题: 要对 age (年龄)列加以合理性限制,因为我记得曾经在学习关系型数据库课程的时候,记得好像数据库是可以规定输入参数的合理性的。
ChatGPT 教了我:
- 在创建表时添加CHECK约束
(此处说明略)- 在已有表中添加CHECK约束
SQLite对ALTER TABLE语句的支持较为有限,无法直接添加CHECK约束到已有的列上。因此,需要通过以下步骤来实现:
创建一个带有新约束的临时表。
将原表的数据复制到临时表中。
删除原表。
将临时表重命名为原表名。
(具体代码略)
总之,在 ChatGPT 的帮助下,我成功地学会对 age 列增加了大于等于 0 且小于等于 200 的限制。
之后,我又问:「我故意输入一个错误条目,sqlite返回错误提示:Runtime error: CHECK constraint failed: age >= 0 AND age <= 200 (19) 这里19是什么意思?」
ChatGPT 答:
在SQLite中,错误代码 19 是一个通用的错误代码,表示数据库约束失败。具体来说,它对应的是SQLITE_CONSTRAINT错误码,这个错误码涵盖了所有与数据库约束有关的错误,包括:
(后续答案略)
它也针对我的问题(错误代码 19 是什么?)提供了回答。
然后,我想在 users 中增加一列性别列。我提出了 2 个问题。
其一是:「我要为users增加性别栏,但不仅限于男女」
其二是:「通常国际上比较进步的思想网站,在设计数据库时怎么设计用户性别这一栏目的?」
具体内容从略(因为 ChatGPT 总是回答得很耐心也很长),不过 ChatGPT 确实能用我能够理解的方式来告诉我应该怎么构建一个不仅限于 男性、女性这两种性别的数据列。并在第二个问题中向我展示不同网站对于性别列的数据库设计的几种做法。
从体会到的学习指导的形式转换
以上,我复现了刚才下午我与 ChatGPT 的对话的概况。那么,从中我体会到什么呢?我体会到的是一种学习指导的形式转换。
使用书本的学习过程
在以前通过书本学习,是这样一个过程:
(一)想到一个想要学习的内容→
(二)买教学书→
(三)跟着书本开始实践→
(四)实践中想到新问题→ 仅靠书本,无法解决新问题。可能要参考本书别的章节,甚至能要买别的书。
使用互联网的学习过程
后来,当人们能够开始利用互联网上的搜索功能开始学习,是这样的过程:
(一)想到一个想要学习的内容→
(二)搜索相关文章→
(三)跟着网上教程开始实践→
(四)实践中想到新问题→
(五)开始搜索别的网上教程案例→
(六)判断搜到的案例是否能解决我的问题→Goto (三)跟着网上教程开始实践→
嗯,至少可以形成一个循环了,可以不断地通过「搜索别的帖子」来解决自己大脑里不断冒出的新的想法、疑问。
使用生成式 AI 的学习过程
以下是我今天体会到的学习过程:
(一)想到一个想要学习的内容→
(二)询问生成式 AI →
(三)开始根据 AI 的回答实践→
(四)实践中想到新问题→
(五)询问生成式 AI → Goto (三)开始根据 AI 的回答实践→
就是说,因为 AI 可以在较大程度上理解学习者的问题并即时给出解答,因此,学习者就可以省去为了解决一个新的疑问,而原本需要花时间在网上不断「(五)开始搜索别的网上教程案例」以及「(六)判断搜到的案例是否能解决我的问题」的这两个步骤。直接改为「(五)询问生成式 AI」来应对自己脑海中的疑问或新的主意。
试看我今天对初试 SQLite 的过程中,提出的几个问题:
- 对安装是否会影响操作系统环境的不安——这是属于实践前的准备问题, 看了 AI 的解答我消解了不安,着手实践。
- (我并没有问具体问题)—— AI 主动给了我一个创建新表的实践建议。
- 我提出为年龄列增加限制的问题——这是一个纯 SQL 语法的问题, AI 给了我解答。
- 我提出了一个对错误代码 19 的疑惑——这是一个报错信息的解释问题, AI 给了我解答。
- 我提出新增不仅限于男女的性别列,并且希望 AI 提供一些别的网站的做法——这既是一个很「进步」的问题(涉及到性别议题对数据库设计的影响),也是一个不仅仅语法上,还涉及到 AI 对目前国际上通常做法的案例展示。 AI 也很好地回答了我。
你看,在短短一个小时的学习过程中,我的疑问既包括我以前模模糊糊掌握的知识,也包括了对于错误代码的疑惑,还包括了超过技术层面,涉及社会理念以及实践的问题。 AI 都给了相应的解答,我也都掌握了。
由此,在我这个初试 SQLite 的案例中, AI 所表现出的教学能力,可以说已经不仅是「个人定制教学」了,而是没有预先定制,随时随地应答来自我脑袋里冒出的各种各样的角度、层面的主意及疑问。我想这就是一种 AI 辅助教学所带来的形式转换吧。
不过,我也知道 AI 的功能也一定有现在的界限,这受限于其当前训练用到的数据,以及推理算法。如果是更加深入的学习,以及所要学习的是更复杂或更加新颖的技术,生成式 AI 能在多大程度上解释给任何一个不同层次、不同知识储备的用户呢?