SQL一次创建多个表

时间:2012-01-07 02:31:50

标签: php mysql sql

我需要一次创建多个表。我很难找到完成这个的正确方法。目前我的脚本如下所示:

  private function buildDB() {
    $sql = <<<MySQL_QUERY
CREATE TABLE IF NOT EXISTS headings (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)

CREATE TABLE IF NOT EXISTS titles (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)
MySQL_QUERY;

    return mysql_query($sql);
  }

显然,这不起作用,也没有创建表。是否有一种简单的方法可以同时创建多个表?

3 个答案:

答案 0 :(得分:4)

MySQL因为你没有分隔你的查询而感到困惑。在第一个CREATE语句后添加分号:

private function buildDB() {
    $sql = <<<MySQL_QUERY
        CREATE TABLE IF NOT EXISTS headings (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100)
        );

        CREATE TABLE IF NOT EXISTS titles (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100)
        )
MySQL_QUERY;

    return mysql_query($sql);
}

此外,根据Heredoc documentation,确保MySQL_QUERY位于没有其他字符的行的开头,除了分号


如上所述似乎不起作用,请尝试使用此代码:

private function buildDB() {
    $sql1 = "CREATE TABLE IF NOT EXISTS headings (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100))";

    $sql2 = "CREATE TABLE IF NOT EXISTS titles (
        type        VARCHAR(150),
        heading     VARCHAR(100),
        uniqueid    VARCHAR(100))";
MySQL_QUERY;

    return mysql_query($sql1) && mysql_query($sql2);
}

可能使用mysqli_multi_query()(MySQL版本不存在),但你必须使用MySQLi。上面的代码返回两个查询的逻辑AND,因此如果失败,您仍然会返回0

答案 1 :(得分:1)

这是因为mysql_query()一次只能执行一个查询。请尝试使用mysqli :: multi_query()代替(http://php.net/manual/en/mysqli.multi-query.php),但请用分号结束查询。

然而,最简单的方法是直接在MySQL客户端

中运行CREATE TABLE语句

答案 2 :(得分:1)

只要正确分隔,您就可以发出多个查询。发出多个查询时,请更改此:

CREATE TABLE IF NOT EXISTS headings (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)

CREATE TABLE IF NOT EXISTS titles (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
)

CREATE TABLE IF NOT EXISTS headings (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
); // added a friendly semicolon

CREATE TABLE IF NOT EXISTS titles (
type        VARCHAR(150),
heading     VARCHAR(100),
uniqueid    VARCHAR(100)
); // added a friendly semicolon

你应该被设置。

如果没有,请在那里进行一些调试,以确切了解SQL或周围代码的不正确之处。