将参数传递给MySQL脚本命令行

时间:2012-04-19 13:39:20

标签: mysql cmd

是否有任何选项可以将参数从命令行传递到MySQL脚本?

在此示例中类似@start_date:

mysql –uuser_id -ppassword –h mysql-host -A -e 
"set @start_date=${start_date}; source ${sql_script};" >${data_file};

4 个答案:

答案 0 :(得分:37)

在网上找到答案here

基本上,假设我们要运行此查询:

Select c_id, c_first_name,c_last_name, c_address,last_modified_date
from customer
where last_modified_date >=@start_date and last_modified_date <= @end_date;

我们可以像这样传递'start_date'和'end_date':

/usr/bin/mysql –uuser_id -ppassword –h mysql-host -A \
    -e "set @start_date=${start_date}; set @end_date=${end_date};\
        source ${sql_script};" > ${data_file}

答案 1 :(得分:2)

简答:

bash:

        mysql -u"$mysql_user" -p"$mysql_user_pw" \
        -e "set @mysql_db='$mysql_db';source \
        00.create-mysql-starter-db.mysql ;" > "$tmp_log_file" 2>&1

MySQL的:

     SET @query = CONCAT('CREATE DATABASE /*!32312 IF NOT EXISTS*/ `'
     , @mysql_db , '` /*!40100 DEFAULT CHARACTER SET utf8 */') ; 
     -- SELECT 'RUNNING THE FOLLOWING query : ' , @query ; 
      PREPARE stmt FROM @query;
      EXECUTE stmt;
      DEALLOCATE PREPARE stmt;

答案很长: 整个概念作为一个可运行的bash,mysql app:

https://github.com/YordanGeorgiev/mysql-starter

    git clone git@github.com:YordanGeorgiev/mysql-starter.git

答案 2 :(得分:0)

“-e”选项对使用的引号是明智的,请尝试双引号:

mysql –uuser_id -ppassword –h mysql-host -A -e 
"set @start_date=\"$start_date\"; source \"$sql_script\";" >\"$data_file\";"

答案 3 :(得分:0)

在某些情况下,您可以通过将脚本组合在一起以运行具有不同预定义参数的 SQL 代码来避免使用 bash 代码。

例如:

do-something-production.sql

USE mydb-prod;
SET @arg=5;
SOURCE do-something.sql;

do-something-test.sql

USE mydb-test;
SET @arg=10;
SOURCE do-something.sql;

do-something.sql

UPDATE table SET col = (SELECT @arg);