php - 在事务中插入 mysql 外键和主键。

标签 php mysql transactions

只是为我正在做的一个小项目寻找一些提示和指示。我有一些想法,但我不确定它们是否是最佳实践。我正在使用 mysql 和 php。

我在数据库中有一个名为 nomsing 的表。

它有一个名为 row id 的主键,它是一个整数。

然后我有大约 8 个其他表引用了这个表。 例如,它们被称为 nomplu、accsing、accplu、datsing、datplu。 每个都有一列引用 nomsing 的主键。

使用我的 php 代码,除了一件事,我有所有信息可以插入到表中,即 nomsing 表的行 ID 主键。这样 php 就会生成一系列如下所示的插入。

INSERT INTO nomsing(word,postress,gender) VALUES (''велосипед","8","mask").
INSERT INTO nomplu(word,postress,NOMSING?REFERENCE) VALUES (''велосипеды","2",@the reference to the id of the first insert@).

还有更多的插页,但这一个说明了要点。第二个插入应引用第一个插入的自动生成的 ID。我这样做是为了作为一个事务工作,所以所有的插入都应该完成或没有。

我的一个想法是不自动生成 id 并在 php 中自己生成它。这样可以知道交易前给出的 ID,但随后我将不得不检查该 ID 是否已经在数据库中。

我的另一个想法是进行第一次插入,然后在 php 中查询该插入的行 ID,然后进行第二次插入。我的意思是两者都应该有效,但它们似乎不是最佳解决方案。我不太熟悉数据库事务功能,但在这种情况下最好的方法是什么。我不喜欢插入然后查询 id 然后运行其余查询的想法。只是看起来效率很低,或者我错了。

最佳答案

只需在主表中插入一行。然后你可以获取 insert id (lastInserId 在 PDO 上时)并使用它来填充您的其他查询。

关于php - 在事务中插入 mysql 外键和主键。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12245599/

相关文章:

php - 如何在代码点火器模型中跨多个函数实现数据库锁定?

php - 信息太多,PHP错误?

ruby-on-rails - 如何在运行 `rake db:migrate` 后立即防止任何 ActiveRecord::PreparedStatementCacheExpired 错误?

android - java.lang.IllegalStateException : Cannot perform this operation because there is no current transaction 错误

javascript - 根据答案显示另一个字段

php - 无法显示来自数据库的不同图像

php - 具有多个结果的子选择

sql - WHERE 子句中字段的顺序是否会影响 MySQL 的性能?

使用插入忽略(或类似)和唯一 ID 进行 MySQL 事务处理

javascript - 如何使用 onclick 填写多个输入表单