MySQL数据库操作

时间:2017-10-20 04:14:11

标签: mysql sql

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

2 个答案:

答案 0 :(得分:1)

我可以使用一个查询吗?

当你说" table id "我想你的意思是表的id列......不需要使用两个查询。您可以使用一个查询,如果您愿意,可以一次插入多个记录(推荐)。

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

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)
)

表格具有以下结构:

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具有以下值:

INSERT INTO `products` (`id`, `product_code`)
VALUES
    (1,'1234'),
    (2,'6587'),
    (3,'9678'),
    (4,'5676');

orders表中的结果如下所示:

id  order_id    product_id
--------------------------
1   37          2
2   37          3

经验法则

我也从未听说过有关操作所需查询数量的规则。无论如何,这些是我严格遵循的一些主要规则:

  • 如果您有机会仅使用一个查询来实现特定的数据访问操作 - 即使它变得非常复杂 - 那么就不要犹豫了。只要有机会,就把数据库引擎放到最大的工作状态,即使它看起来更容易" chunk" db操作并从一些编程语言的功能中受益,以便运行它们。
  • 利用 - 设计良好 - 索引。它们在速度优化方面非常强大。使用EXPLAIN进行检查。
  • 以这种方式设计表格,以便在其中找不到冗余数据。例如,与上面的示例类似,product_code应仅保存在products表中,即使在orders表中也可以保存一些意义。
  • "规范" a / all数据库中各个表的自己的命名规则。
祝你好运!

答案 1 :(得分:0)

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

您应该使用尽可能多的查询来实现目标。实际上你最终将取决于要完成的行动,所需的性能,所需的可维护性(想想可能需要改变它的同事)以及其他要求或偏好。

如果真的可以用一个查询进行每次“单一操作”,我们可能不需要交易。

我的建议是通过尽可能多的查询解决您的问题,以便您和您的同事在未来几年仍然了解已完成的工作,并查看交易(MySQL手册和无数网上的教程很好地解释了它们。)