【问题标题】:How to insert data to several tables in MySQL?如何将数据插入 MySQL 中的多个表?
【发布时间】:2012-12-09 00:19:34
【问题描述】:

我才刚刚开始学习在 MySQL 中连接表。现在,我有一个小项目,我只想让访问者通过表单插入数据。然后数据显示在一个有四行的 HTML 表中,将我数据库中的两个表连接在一起。 “问题”是数据应该提交到我数据库中的那两个不同表中。

我试过了

$query = "INSERT INTO table1, table2 (col1, col2, col3, col4) VALUES ('value1', 'value2', 'value3', 'value4')";

但这似乎并没有做到。将表单数据提交到多个数据库表的正确语法是什么?哦,我读过一些类似的线程提到使用事务。这是必要的吗?我的表使用 MyISAM 运行。谢谢!

【问题讨论】:

  • 为什么您甚至希望两个表中的数据完全相同。对我来说,这听起来像是糟糕的数据库设计。
  • 不完全相同的数据。 Col1 和 Col2 是我的第一个表中的列,Col3 和 Col4 是我的第二个表中的列。

标签: php mysql forms


【解决方案1】:

您可以从MySQL Manual 了解更多信息。简而言之,您不能一次插入多个表。这为您提供了三个选择:

  1. 多个INSERT 语句
  2. Triggers
  3. Stored Procedures

这个问题的答案:MySQL Insert into multiple tables? (Database normalization?) 建议使用事务,这不适用于 MyISAM,但如果您切换到 InnoDB,这是一个很好的参考。

我真的建议您阅读Triggers。他们可以让你的生活更轻松。但是如果你不想使用它们,请查看 PHP 的 mysqli_multi_query,它可以让你同时执行两个不同的查询,例如:

$query = "INSERT INTO table1 (col1,col2) VALUES ('$value1','$value2');";
$query = "INSERT INTO table2 (col3,col4) VALUES ('$value3','$value4');";
$result = mysqli_multi_query($dbcon, $query);

【讨论】:

  • 感谢您的全面回答。我有一些阅读要做!
【解决方案2】:

您可以使用 MySQL Transactions By 来执行此操作: 试试:

BEGIN
INSERT INTO table1 (col1, col2...ETC) 
  VALUES('value1', 'value2'...ETC)
INSERT INTO table2 (col1, col2...ETC) 
  VALUES('value1', 'value2'...ETC);
COMMIT;

【讨论】:

  • 他说他使用的是不支持事务的MyISAM。
  • MyISAM 确实“支持”事务,因为事务命令被解析然后被忽略。 myisam 使用事务语义并没有错,它们只是不做任何事情,而且您绝对不能回滚。无论哪种方式,OP 都必须使用多个插入。
【解决方案3】:

使用 MyISM,您需要为要插入的每个表执行查询,我不相信在单个查询中您可以添加到多个表。

在您的情况下,您不能使用事务,因为您的引擎不支持它们。

【讨论】:

    【解决方案4】:

    您唯一的解决方案是使用多个单独的查询,最好是在一个事务中。如果要确保插入来自每个查询的数据,则需要事务,在这种情况下,您 COMMIT 事务;如果其中一个查询失败,您可以ROLLBACK

    附:使用 InnoDB。在INSERT 查询至少占所有查询的 5% 的任何环境中,它都会变得更好(遗憾的是,我无法提供来源,因为我几个月前读过它并且不再记得在哪里了)。

    【讨论】:

      【解决方案5】:

      我可能是错的,但您不会同时插入多个表。您将其拆分为两个或多个命令,每个命令都处理特定的插入,有什么大不了的,那一行额外的代码(使一切更清晰)输入起来太麻烦了?

      这样看,如果你写了一个大脚本,例如处理一些数据的例程,你对代码的分段越多,调试起来就越容易,如果有必要,还可以接种有问题的指令,从长远来看,它最终会为您节省时间。

      【讨论】:

        【解决方案6】:

        我之前有这个问题你可以使用多个查询功能

        $query = "INSERT INTO table1 (col1,col2) VALUES ('$value1','$value2')";
        $query = "INSERT INTO table2 (col3,col4) VALUES ('$value3','$value4')";
        $result = mysqli_multi_query($dbcon, $query);
        

        【讨论】:

          猜你喜欢
          • 2012-06-13
          • 2010-12-07
          • 1970-01-01
          • 1970-01-01
          • 2014-07-15
          • 1970-01-01
          • 1970-01-01
          • 2018-09-27
          • 1970-01-01
          相关资源
          最近更新 更多