22

我用谷歌搜索了很多,我什么也没找到!

[root@someday backups]# mysql -u username_1 -p db_1 < tables_to_import/tables.sql 
ERROR 1050 (42S01) at line 19: Table 'ps_customer' already exists

mysql -f是相同的。我希望简单地导入那个 .sql 并重写那个表,有人可以帮我吗?

ps 我知道当您导出数据库时,您可以选择“DROP TABLE”选项,但如果我有备份,没有此声明?我怎么能强迫?谢谢

4

4 回答 4

54

当您执行 mysqldump 添加 --add-drop-table (如提到的 twihoX )。然后像往常一样进行导入。所以像:

mysqldump --add-drop-table -u user -p db_1 > dumpfile.sql

mysql -u user -p db_1 < dumpfile.sql 
于 2015-07-17T19:05:48.107 回答
7

您是否要覆盖整个数据库?如果是这样,您可以手动删除所有表,然后运行导入脚本。这在 phpmyadmin 中很容易做到。如果您使用的是 CLI,最快的方法是使用DROP DATABASE databasename然后create database,尽管我认为您必须为任何非 root 用户重新授予权限。

另一种选择是打开您的转储文件并DROP TABLE tablename在每个 CREATE TABLE 命令之前添加。您可以使用一些聪明的正则表达式轻松地做到这一点。

于 2012-10-01T16:29:52.797 回答
2

我建议 --add-drop-table 选项。

于 2014-02-17T16:15:25.437 回答
1

我知道这个问题有点老了,它已被标记为已正确回答,我只想在这里为那些在导出时不使用 --add-drop-table 的人(比如我)添加这个。

您可以做的是登录 MySQL 并删除您计划覆盖的表,然后在导入时使用 --force。

所以登录MySQL

mysql -h HOSTNAME - USERNAME -p

然后告诉mysql你想使用哪个数据库

mysql> use DATABASE_NAME

删除要覆盖的表

mysql> DROP TABLE my_images;

Then you are ready to import, so log out of mysql and back to where your SQL file was uploaded and run the following command

$ mysql --force -uDB_USER -p DB_NAME < myuploadedfile.sql

This will force MySQL to continue importing any new tables and ignore the 'table already exists error'

于 2020-11-19T01:24:52.993 回答