使用变量创建MySQL数据库

6
我想做类似于以下的事情: CREATE DATABASE IF NOT EXISTS @database_name; 从阅读mysql准备语句的语法来看,似乎不能用它们来创建数据库,否则像这样的东西就可以了。

SET @s = CONCAT('CREATE DATABASE IF NOT EXISTS ',@database_name);
PREPARE stmt FROM @s;
EXECUTE stmt;

理想情况下,我希望它作为一个可以从shell脚本运行的.sql文件的内容。请参考此链接
#!/bin/bash

MYSQL="mysql"
`${MYSQL} --version >& /dev/null`
if [ $? != 0 ]; then
    MYSQL="mysql5"
    `${MYSQL} --version > /dev/null`
    if [ $? != 0 ]; then
        echo "Can't find mysql binary?"
        exit 1
    fi
fi

 ${MYSQL} -u root --password=###### -e "set @database_name:='ben_search';source CreateSkeleton.sql;"

有什么想法吗?

我的想法是在你的.sql文件中放置占位符,并使用shell在将文件传递给mysql之前将它们替换为数据库名称。 - Mchl
似乎类似于这个答案,尽管那是使用过程。我在MySQL 5.5.19中尝试了您的预处理语句,它似乎可以工作。您是否在预处理语句中遇到错误? - John McCarthy
啊,我更仔细地查看了文档链接。看起来MySQL 5.5 支持许多语句 ,这在5.0中是不支持的。因此,明确一点,MySQL 5.5将支持使用CREATE DATABASE的预处理语句。 - John McCarthy
1个回答

2
您可以将SQL文件中的CREATE DATABASE语句移除,并从您的shell脚本中发出该语句:
#!/bin/bash
dbname='my_db'
mysql -e "CREATE DATABASE $dbname"
mysql $dbname < /path/to/file/CreateSkeleton.sql

我知道这是一个老问题,希望你当时已经找到了解决方案... 我只是想缓解一下我的强迫性求解需求。 - RandomSeed

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