在一个Query / Transaction中更新三个类别表并使用MySQL设置类别映射

时间:2013-02-14 16:24:19

标签: mysql vb.net sql-update insert-update

我有三张桌子;

masterCat
category
subCat

Master cat只有两列idname

后续表格有三列,idnamemapsTo

显然,mapsTo表中的category列表示此类别属于哪个masterCat,从而创建了分层类别结构

我正在尝试编写一个脚本,以便用户更新和修改其类别,包括添加新类别。

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

newMasterCat > newCategory > newSubCategory

如果没有这么多代码行,我怎么能在MySQL中编写它,这就是它需要做的事情:

  1. 在每个表中创建新行(3个插入作为一个事务,         没问题)
  2. 回顾这些行,找出分配给masterCatcategory表修正的ID。
  3. 使用父表中创建的记录的ID更新categorysubCat中的新行
  4. 我可以分三个阶段完成这项工作,但有更快的方法吗?

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

1 个答案:

答案 0 :(得分: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()

之类的内容

顺便说一下,我会注意到 - 很多人都花了很多时间担心防止多次数据库往返,而这个数字级别不是他们应该关注的瓶颈。