1

我有三张桌子;

masterCat
category
subCat

猫大师只有两列idname

随后的表格有三列idnamemapsTo

很明显,表mapsTo中的列category表示masterCat该类别属于哪个类别,从而创建了一个层次类别结构

我正在尝试编写一个脚本,使用户能够更新和修改他们的类别,包括添加新的类别。

因此,如果创建了一个新结构:

newMasterCat > newCategory > newSubCategory

在没有那么多代码行的情况下,如何在 MySQL 中编写它,这就是它需要做的:

  1. 在每个表中创建新行(3 个插入作为一个事务,没问题)
  2. 回顾那些行,找出分配给masterCatcategory表修改的 ID。
  3. 使用在其父表中创建的记录的 IDcategory更新新行subCat

我可以分三个阶段做到这一点,但有更快的方法吗?

(在 VB.net 中使用 MySQL 数据库和 MySQL 驱动程序)

4

1 回答 1

1

您可以使用该LAST_INSERT_ID()功能来完成此操作: http: //dev.mysql.com/doc/refman/5.0/en/information-functions.html#function_last-insert-id

此函数的结果仅限于当前连接,不会受到其他并发插入的影响。所以你的插入看起来像:

INSERT INTO masterCat (name) VALUES ('masterCat1');

INSERT INTO category (name, mapsTo) VALUES ('Cat1', LAST_INSERT_ID());

最后你可以以同样的方式第三次链接它:

INSERT INTO subCat (name, mapsTo) VALUES ('SubCat1', LAST_INSERT_ID());

有人可以评论如何在 VB.NET 中执行这些语句,但您可能必须创建一个存储过程才能在单个调用中执行单独的语句 - 即您可能无法在调用中将这些语句链接到类似ExecuteNonQuery().

顺便说一句,我要指出-很多人花费大量时间担心防止多次数据库往返,而这不是他们应该关注的瓶颈。

于 2013-02-14T16:38:17.337 回答