【问题标题】:Problem with PHP/MySQL InsertPHP/MySQL 插入问题
【发布时间】:2011-09-19 10:44:43
【问题描述】:

如何向两个或多个表中插入数据?

目前我正在使用这个技巧。 (假设语法是正确的)

$Sql1 = "insert into user";
$Sql2 = "insert into files";
$Sql3 = "insert into messages";

query $Sql1
query $$ql2
query $Sql3

所以我正在使用这个,我需要优化。

另外,我想我需要使用外键?但我不知道如何在 phpmyadmin 上进行操作。

最后:

这就是我想要的。

在“user”表中插入数据,然后自动在“messages”和“files”表中插入数据 还将有一个与用户相同的 ID。这就是我在代码中使用 3 个查询的原因。

请帮帮我。

提前感谢!

我的

【问题讨论】:

  • 为什么需要优化这个?这三个查询是否构成实际性能问题?

标签: php mysql database database-optimization


【解决方案1】:

使用多个查询完全没问题。

但是,您应该将 3 个查询封装到一个 transaction 中。也就是说,如果一个查询由于某种原因失败,所有先前查询(如果有的话)的影响可以回滚,以便您的数据库保持一致状态。

注意:事务不能使用 MySQL 的 MyISAM 表。此外,您必须使用 PHP 的 Mysqli(或 PDO)才能使用事务。 (我假设您没有使用一些高级数据库抽象层。)

关于您关于外键的问题:据我所知,当您将 MyISAM 引擎用于数据库中的表时(我认为)没有区别,因为 MyISAM甚至不支持外键的显式建模。然而,像 InnoDB 这样的其他表引擎可以使用外键来检查某些约束,例如“消息必须始终与现有人员相关联”。

这里有一些关于外键的好例子:http://www.postgresql.org/files/documentation/books/aw_pgsql/node131.html

【讨论】:

    【解决方案2】:

    【讨论】:

      【解决方案3】:

      使用 mysql,你可以使用 LAST_INSERT_ID() 或 php mysql_insert_id() 函数。查看此手册条目:

      http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

      http://php.net/manual/en/function.mysql-insert-id.php

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-21
        • 2013-02-22
        • 1970-01-01
        • 2020-01-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多