您的位置 首页 php

php执行批处理执行mysql 语句LOAD DATA INFILE高效导入数据

MySQL LOAD DATA INFILE使用官方地址

 LOAD DATA
    [LOW_PRIORITY | CONCURRENT] [LOCAL]
    INFILE 'file_name'
    [REPLACE | IGNORE]
    INTO TABLE tbl_name
    [PARTITION (partition_name [, partition_name] ...)]
    [CHARACTER SET charset_name]
    [{FIELDS | COLUMNS}
        [TERMINATED BY 'string']
        [[OPTIONALLY] ENCLOSED BY 'char']
        [ESCAPED BY 'char']
    ]
    [LINES
        [STARTING BY 'string']
        [TERMINATED BY 'string']
    ]
    [IGNORE  number  {LINES | ROWS}]
    [(col_name_or_user_var
        [, col_name_or_user_var] ...)]
    [SET col_name={expr | DEFAULT}
        [, col_name={expr | DEFAULT}] ...]
  
  • load data infile语句从一个文本/文件中以很高的速度写入表中。
  • 读取位于服务器上的文本文件时,文件必须处于数据库目录或可被所有人读取
  • 你指定关键词low_priority,那么MySQL将会等到没有其他人读这个表的时候,才把插入数据
  • 指定local关键词,则表明从客户主机读文件。如果local没指定,文件必须位于服务器上
  • eplace和ignore关键词控制对现有的唯一键记录的重复的处理
  • fields关键字指定了文件记段的分割格式

terminated by分隔符:意思是以什么字符作为分隔符

enclosed by字段括起字符

escaped by 转义字符

terminated by描述字段的分隔符,默认情况下是tab字符(\t)

enclosed by描述的是字段的括起字符。

escaped by描述的转义字符。默认的是 反斜杠 (backslash:\ )

1、win系统导入

  • 批处理文件 import.bat 路径为d:/files/bat
 
@ echo  OFF
/*dbhost执行文件不在本服务器需要,本次忽略*/@SET dbhost=主机名(例如: 127.0.0.1 )
/*数据库账号名称*/@SET dbuser=***
/*数据库密码*/@SET dbpasswd=****
@SET sqlpath=%~dp0
//需要执行的 sql语句 
@set sqlfile=demo. sql 
/*未配置 环境变量 时加下下面两句*/@set MySQL_HOME=C:\MySQL5.7.26
@set PATH=%MySQL_HOME%\bin;%PATH%
  /*连接 MySQL数据库 并执行sql脚本  注意database为写入数据库名*/@mysql -u%dbuser% -p%dbpasswd% database  < %sqlpath%%sqlfile%  
  • sq文件 demo.sql 路径为d:/files/bat
   /*D:\\files\\simple.csv文件路径 ,table为写入数据表名,uname, phone数据库字段名称*/LOAD DATA LOCAL INFILE 'D:\\files\\simple.csv' INTO TABLE table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'  IGNORE 1 LINES (uname, phone);
/*退出*/quit  

simple.csv

  • php执行批处理
 $shell = "d: && cd d:/files/bat && import.bat";
system($shell,$status);
if( $status ){
echo "执行失败";
} else {
echo "执行成功";
}  

注意如果system执行失败

编辑php.ini查找 disable_functions 将等号后面的 system 去掉即可。其他人自行查资料

注意导入前开启mysql local_infile

开启local_infile

2、 linux 系统导入

  • linux导入比较简单
  • 注意 ***处填写数据库账号,****处填写数据库密码
  • table为写入数据表名,uname, phone数据库字段名
  • 批处理文件 import.sh 路径为d:/files/bat
 #!/bin/bash
mysql -u*** -p**** <<EOF
        use zsj_datas;
        LOAD DATA LOCAL INFILE '/d/files/simple.csv' INTO TABLE table FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\r\n'  IGNORE 1 LINES (uname, phone);
 EOF   
  • php执行批处理
 $shell = " cd /d/files/bat  && sh ./ import.sh";
system($shell,$status);
if( $status ){
echo "执行失败";
} else {
echo "执行成功";
}  

注意如果system执行失败

编辑php.ini查找 disable_functions 将等号后面的 system 去掉即可。其他错误自行查资料

注意导入前开启mysql local_infile

开启local_infile

文章来源:智云一二三科技

文章标题:php执行批处理执行mysql 语句LOAD DATA INFILE高效导入数据

文章地址:https://www.zhihuclub.com/78779.shtml

关于作者: 智云科技

热门文章

网站地图