一尘不染

SQL一次创建多个表

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);
  }

显然,这是行不通的,并且不会创建任何表。有一种简单的方法可以一次创建多个表吗?


阅读 145

收藏
2021-03-08

共1个答案

一尘不染

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文档,请确保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。上面的代码返回两个查询的逻辑与,因此,0如果一个查询失败,您仍然会得到返回。

2021-03-08