使用单行命令导入SQL文件创建MySQL数据库

5

我有一个需要从命令行上传的 SQL 文件。为了做到这一点,我首先需要进入 MySQL 并创建数据库。

mysql> create database myDB;

接着从命令行调用以下命令:

mysql -u username -p myDB < myDB.sql

有没有一种方法可以在命令行中一行完成所有操作?
我尝试将以下行(以及各种组合)添加到myDB.sql文件的开头:
create database `myDB`;
use `myDB`;

并且执行以下命令
mysql -u username -p < myDB.sql

但是那并没有起作用。

ERROR 1046 (3D000) at line 7: No database selected
3个回答

5

.sql文件通常就是一系列SQL DDL/DML查询。如果是由mysqldump创建的,则应包含从头开始重建数据库所需的所有内容,包括必要的create dbcreate table查询。

如果它们不在那里,您可以通过简单的文件串联/修改自行添加到文件顶部,例如:

echo 'create database foo;' > new.sql
cat otherstuff.sql >> new.sql
mysql < new.sql

就像我在问题中说的那样,我已经尝试过了,但它没有生效。SQL文件的顶部文字确切地写着 create database myDB; use myDB; - Sal
你用来登录MySQL的账户是否有执行该操作的权限?你肯定需要被授予“创建”权限。 - Marc B
2
我尝试了基本的创建数据库/创建表/插入数据操作,如果数据库或表已经存在,则忽略脚本的其余部分。要检查数据库是否已经存在吗?还是改用if not exists来创建数据库和表。 - Marc B
1
所以,如果表/数据库已经存在,create调用(任何一个)将失败,并中止脚本的其余部分。如果您不确定表结构在转储/重新加载时间之间不会更改,那么您可能希望首先添加drop命令。否则,您可能会插入到结构不同的表中。如果您添加了字段,则没有大问题,但是如果您删除/更改了字段,则最好情况下可能会在数据库中留下垃圾数据。 - Marc B
1
cat 'create database foo;' > new.sql returns cat: create database foo;: No such file or directory i believe it should be echo 'create database foo;' > new.sql - Fuseteam
显示剩余3条评论

5
如果您使用--databases--all-databases选项生成了mysqldump文件,则它会将正确的CREATE DATABASE语句放入转储文件中。

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接