数据库 – 如何在Mac终端窗口中将sql文件读入sqlite命令

我试图指向一个路径下的文件.

我的test2.sql看起来像这样:

create table setting (id integer primary key, status text)
insert into setting values (1, 'new')

当我输入此命令时:

sqlite> .read users/name/test2.sql

我收到此错误:

Error: cannot open "test2.sql"

或者表现得好像没有错误地执行但没有记录添加到表中.

我做

sqlite> select * from setting;

这可以追溯到:

sqlite> 

有没有使用.read命令的问题?

最佳答案 首先,每个SQL语句必须以分号结尾.

-- file: test2.sql
create table setting (id integer primary key, status text);
insert into setting values (1, 'new');

其次,当数据库和文件“test2.sql”在同一目录中时,您可以仅使用文件名来读取文件.当文件名中有空格时,文件名周围的双引号可以避免错误.

$sqlite3 test.db
SQLite version 3.8.7.2 2014-11-18 20:57:56
Enter ".help" for usage hints.
sqlite> .read "test2.sql"

sqlite> .headers on
sqlite> .mode columns
sqlite> select * from setting;
id          status    
----------  ----------
1           new       

使用完整路径应始终有效.如果文件名中可能有空格,也可以双引号完整路径.字符串users / name / test2.sql不是完整路径.完整路径始终以/开头. (POSIX路径中的目录分隔符是/;在HFS路径中,分隔符是:.)您还应该知道某些(大多数?)文件系统区分大小写:/users/name/test2.sql和/ Users / name / test2.sql是两个不同的东西.

您还可以使用命令行重定向读取该文件.同样,如果数据库和SQL文件位于同一目录中,则只需使用文件名即可.

$rm test.db
$sqlite3 test.db < "test2.sql"
$sqlite3 test.db
SQLite version 3.8.7.2 2014-11-18 20:57:56
Enter ".help" for usage hints.
sqlite> .headers on
sqlite> .mode columns
sqlite> select * from setting;
id          status    
----------  ----------
1           new       

最后,检查SQL文件的权限.

$ls -l "test2.sql"
-rw-rw-r-- 1 mike mike 118 Jan 15 09:28 test2.sql

如果您对该文件没有读取权限,则无法打开它.

点赞