【问题标题】:One SQL query to create multiple tables with same sheet一个 SQL 查询使用同一张表创建多个表
【发布时间】:2017-06-07 10:13:17
【问题描述】:

我正在尝试在这样的单个查询中创建具有相同工作表的多个表

 $query ="CREATE TABLE users1, users2, users3 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(24) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL,
    )";

然后尝试使用 PDO 执行它

$stmt->execute();

但没有用,然后尝试将它们分开

$query = "CREATE TABLE users1 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(24) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
    );
CREATE TABLE users2 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(24) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
    );
CREATE TABLE users3 (
    id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    username VARCHAR(24) NOT NULL UNIQUE,
    password VARCHAR(255) NOT NULL
    );
";

一次有和没有; 但还是报错

【问题讨论】:

  • 为什么要类似的表?似乎是一个糟糕的设计。
  • @jarlh 尝试用三个不同的用户制作 3 种类型的页面
  • 我同意 jarlh;为每个用户设计一个表并不是很好的设计。您得到的错误与多余的逗号有关:password VARCHAR(255) NOT NULL,)
  • 如果您需要不同类型的用户,只需在您的用户表中添加列type

标签: php sql


【解决方案1】:

试试下面的代码:

$sql = "
CREATE TABLE users1 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(24) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
CREATE TABLE users2 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(24) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
CREATE TABLE users3 (
id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(24) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
";

try {
    $stmt = $db->prepare($sql);
    $stmt->execute();
}
catch (PDOException $e)
{
    echo $e->getMessage();
    die();
}

您可以阅读有关 pdo 多查询的有趣内容:PDO support for multiple queries (PDO_MYSQL, PDO_MYSQLND)

【讨论】:

  • 我们不能用唯一或索引替换主键吗?还是我们必须改变它?
  • 我认为没有必要这样做。只需检查唯一键和主键之间的差异。
  • 我验证了用户名 VARCHAR(24) NOT NULL INDEX,但给了我一个问题,我猜这部分只有 Primary 和 Unique 是可能的。
猜你喜欢
  • 1970-01-01
  • 2012-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多