如果我想从mysql数据库中读取表id,以便将它添加到写操作中,那么我需要执行两个查询吗?或者,在使用mysql时,是否有一种方法只执行一种?根据经验,您很少需要两个查询,但是对于一个操作,您不应该超过两个查询,对吗?
发布于 2017-10-20 09:18:17
我可以使用一个查询吗?
当你说“表id”时,我想你指的是表的id列.不需要使用两个查询。您可以使用一个查询,如果您愿意,可以同时插入多个记录(建议)。
例如:将products列表中的两个产品作为订单的新条目( 37作为order_id)插入到orders表中。每个product_id (2,resp. )3)将根据指定的products值(6587,resp )从product_code表中读取。9678)。
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经验法则
此外,我也从未听说过关于操作所需查询数量的这样一条规则。总之,以下是我严格遵守的一些主要规则:
EXPLAIN检查它们。product_code应该只保存在products表中,即使在orders表中也可以保存它。祝好运!
发布于 2017-10-20 06:42:28
我不认为有这样的经验法则。
您应该使用尽可能多的查询来实现您的目标。您最终的结果实际上将取决于要执行的操作、所需的性能、所需的可维护性(想想可能需要更改它的同事)以及其他需求或偏好。
如果真的可以用一个查询执行每一个“单一操作”,那么我们可能不需要事务。
我的建议是用你需要的尽可能多的查询来解决你的问题,这样你和你的同事们在未来的几年里仍然能理解已经做了什么,并研究一下交易( MySQL手册和网上的无数教程都很好地解释了这些问题)。
https://stackoverflow.com/questions/46842268
复制相似问题