学习SQL艰难的方法 - 在SQL Lite 3中使用.db创建.sql - 为什么以及如何?

sur*_*ive 6 sqlite command-line

作为一名初学程序员,拥有+20小时的Python编码和新手对命令行的熟悉,我开辟了Zed Shaw的"学习SQL困难之路"并很快被难倒.

练习01中,Zed使用第一个命令创建了第一个表:

sqlite3 ex1.db < ex1.sql
Run Code Online (Sandbox Code Playgroud)

但是,这无法在我的命令行中运行,给出错误消息"-bash:ex1.sql:没有这样的文件或目录." 最初,我忽略了这个推荐的代码并继续:

sqlite3 ex1.db
SQLite version 3.7.15.1 2012-12-19 20:39:10
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> CREATE TABLE person (
   ...>     id INTEGER PRIMARY KEY,
   ...>     first_name TEXT,
   ...>     last_name TEXT,
   ...>     age INTEGER
   ...> );
Run Code Online (Sandbox Code Playgroud)

在命令行中运行"ls -l"显示:

-rw-r--r--  1 thefifth  staff  2048 Feb 15 15:23 ex1.db
Run Code Online (Sandbox Code Playgroud)

但我想要的却未能得到:

$ ls -l
-rw-r--r--  1 zedshaw  staff  2048 Nov  8 16:18 ex1.db
-rw-r--r--  1 zedshaw  staff    92 Nov  8 16:14 ex1.sql
Run Code Online (Sandbox Code Playgroud)

我用Google搜索并发现这个博客实现了相同的"name.db <name.sql"语法,但是这里的代码也不适用于我.此Stack Overflow也具有类似的语法,但在将.sql转换为sqlite3的上下文中.

具体来说,我想知道这是否是在本机bash终端中使用的"<",并且我无法满足正确使用的某些标准.此外,我不知道创建.sql和.db文件的目的,虽然显然一个比另一个小得多.也许我已经错误地安装了sqlite3,但似乎工作正常.

谢谢你的帮助!

Ant*_*nko 10

sqlite3 ex1.db < ex1.sql
Run Code Online (Sandbox Code Playgroud)

对于上述工作,ex1.sql应该已经存在.<是shell中用于输入重定向的字符.sqlite3在这里启动一个新的或现有的数据库(它将根据需要创建数据库),并从中获取SQL语句ex1.sql,执行它们并相应地进行修改ex1.db.

现在,让我们产生ex1.sql距离ex1.db,你显然想做的事:

sqlite3 ex1.db .dump > ex1.sql
Run Code Online (Sandbox Code Playgroud)

我们再次使用shell重定向工具,现在将输出重定向到ex1.sql.该.dump命令会sqlite写出SQL语句,这些语句将在空数据库中执行时重新创建类似的数据库:重新创建表并填充表INSERT等.

现在你可以转到第1步:

sqlite3 ex1copy.db < ex1.sql
Run Code Online (Sandbox Code Playgroud)


小智 6

  1. 将代码保存在扩展名为.sql的文件中
  2. 然后在终端:sqlite3 ex1.db <ex1.sql创建一个ex1.db
  3. 放入终端:sqlite3 ex1.db .schema
  4. 或者把:sqlite3 ex1.db [...然后....] .schema