首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL数据库操作

MySQL数据库操作
EN

Stack Overflow用户
提问于 2017-10-20 04:14:10
回答 2查看 458关注 0票数 0

如果我想从mysql数据库中读取表id,以便将它添加到写操作中,那么我需要执行两个查询吗?或者,在使用mysql时,是否有一种方法只执行一种?根据经验,您很少需要两个查询,但是对于一个操作,您不应该超过两个查询,对吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-20 09:18:17

我可以使用一个查询吗?

当你说“表id”时,我想你指的是表的id列.不需要使用两个查询。您可以使用一个查询,如果您愿意,可以同时插入多个记录(建议)。

例如:将products列表中的两个产品作为订单的新条目( 37作为order_id)插入到orders表中。每个product_id (2,resp. )3)将根据指定的products值(6587,resp )从product_code表中读取。9678)。

代码语言:javascript
复制
INSERT INTO orders (
    order_id,
    product_id
) VALUES (
    37,
    (SELECT id FROM products WHERE product_code = 6587)
), (
    37,
    (SELECT id FROM products WHERE product_code = 9678)
)

如果表具有以下结构:

代码语言:javascript
复制
CREATE TABLE `products` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `product_code` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8;

CREATE TABLE `orders` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `order_id` int(11) DEFAULT NULL,
  `product_id` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

products具有以下值:

代码语言:javascript
复制
INSERT INTO `products` (`id`, `product_code`)
VALUES
    (1,'1234'),
    (2,'6587'),
    (3,'9678'),
    (4,'5676');

orders表中的结果如下所示:

代码语言:javascript
复制
id  order_id    product_id
--------------------------
1   37          2
2   37          3

经验法则

此外,我也从未听说过关于操作所需查询数量的这样一条规则。总之,以下是我严格遵守的一些主要规则:

  • 如果您有机会只使用一个查询来实现特定的数据访问操作--即使它变得非常复杂--那么请不要犹豫。只要有机会,就让数据库引擎最大限度地工作,即使似乎更容易“分块”db操作,并从某些编程语言的特性中受益,以便运行它们。
  • 利用-好的设计指标。它们在速度优化方面非常强大。使用EXPLAIN检查它们。
  • 以这样的方式设计您的表,这样就不会在其中找到多余的数据。例如,与我上面的例子类似,product_code应该只保存在products表中,即使在orders表中也可以保存它。
  • 在/all数据库中跨表“标准化”自己的命名规则。

祝好运!

票数 1
EN

Stack Overflow用户

发布于 2017-10-20 06:42:28

我不认为有这样的经验法则。

您应该使用尽可能多的查询来实现您的目标。您最终的结果实际上将取决于要执行的操作、所需的性能、所需的可维护性(想想可能需要更改它的同事)以及其他需求或偏好。

如果真的可以用一个查询执行每一个“单一操作”,那么我们可能不需要事务。

我的建议是用你需要的尽可能多的查询来解决你的问题,这样你和你的同事们在未来的几年里仍然能理解已经做了什么,并研究一下交易( MySQL手册和网上的无数教程都很好地解释了这些问题)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46842268

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档