如果我想从mysql数据库读取表id以便将其添加到写操作中,我是否需要执行两个查询?或者有没有办法在使用mysql时只执行一次?根据经验,您很少需要两个查询但是对于单个操作来说,不应该超过两个查询吗?
答案 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
我也从未听说过有关操作所需查询数量的规则。无论如何,这些是我严格遵循的一些主要规则:
EXPLAIN
进行检查。product_code
应仅保存在products
表中,即使在orders
表中也可以保存一些意义。答案 1 :(得分:0)
我认为没有这样的经验法则。
您应该使用尽可能多的查询来实现目标。实际上你最终将取决于要完成的行动,所需的性能,所需的可维护性(想想可能需要改变它的同事)以及其他要求或偏好。
如果真的可以用一个查询进行每次“单一操作”,我们可能不需要交易。
我的建议是通过尽可能多的查询解决您的问题,以便您和您的同事在未来几年仍然了解已完成的工作,并查看交易(MySQL手册和无数网上的教程很好地解释了它们。)