【问题标题】:Best practice for importing a .sql file with error on MySQL在 MySQL 上导入错误的 .sql 文件的最佳实践
【发布时间】:2019-08-27 14:12:44
【问题描述】:

我正在尝试使用此命令行将 .sql 文件导入 MySQL

mysql -u username -p databasename < path/myfile.sql

这是一个 myfile.sql 的示例

INSERT INTO mytable (‘id’,’isDeleted’,’amount’,’date’,’description’,’description_clean’,’isDebit’,’account_id’,’user_uuid’) VALUES (3798,'0',35,'0000-00-00','test','test','1',108,'021752f8-7194-4a4b-8919-fb8216ecba07');
INSERT INTO mytable (‘id’,’isDeleted’,’amount’,’date’,’description’,’description_clean’,’isDebit’,’account_id’,’user_uuid’) VALUES (3799,'0',9.4,'2018-05-02','CB Frichti','CB Frichti','1',108,'316a3da6-821b-42c8-80ea-3c1ac437484e');
INSERT INTO mytable (‘id’,’isDeleted’,’amount’,’date’,’description’,’description_clean’,’isDebit’,’account_id’,’user_uuid’) VALUES (3800,'0',50,'0000-00-00','test','test','1',108,'316a3da6-821b-42c8-80ea-3c1ac437484e');

我的文件包含一些日期,但其中一些日期错误0000-00-00。因此上面的命令返回一个错误。

什么是最好的导入方式?我应该删除日期错误的行吗?有没有办法只导入正确的导入行并忽略那些有错误的行?

感谢您的帮助

【问题讨论】:

  • 将文本编辑器中的“0000-00-00”替换为 NULL(如果该列可以为空)或默认日期“1900-01-01”,那么您可以按原样使用数据或删除它一个你已经导入。 (INSERT INTO ‘‘ 看起来也不正确)
  • @AlexK 听起来你应该把它作为答案:)
  • 插入...什么都没有?
  • 如果您想先清理数据,请记住,编辑为 CSV 格式然后编辑为import that with LOAD DATA INFILE 通常要容易得多。大多数电子表格工具都可以读取和写入 CSV,使编辑变得非常轻松,批量搜索/替换甚至没有那么难。
  • 或者将它加载到一个临时表中,其中列只是字符,然后用 case 语句等编写一些 SQL 来清理它并填充生产表 - 这样你(有效地)有一个记录您所做的更改,并且您可以在下次加载一批讨厌的数据时重新使用它。

标签: mysql


【解决方案1】:

您让我感到困惑,为什么这里有 2 个 sql 文件,很难获得任何真正的帮助到脚本中,因为这一切每次都太难了!

【讨论】:

    【解决方案2】:

    如上所述here

    您可以在 mysql 导入中使用 --force (-f) 标志。 MySQL 不会停止,而是继续并将错误记录到控制台。

    例如:

    mysql -u username -p -f -D path/myfile.sql < path/myfile.sql
    

    用默认值(例如1900-01-01)替换无效值不是一个好习惯,您应该更喜欢NULL

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 2012-01-10
      • 2011-05-09
      • 2016-06-05
      • 2011-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 1970-01-01
      相关资源
      最近更新 更多