[英]Mysql single query with subquery or two separate queries
我有以下结构的表:
id | storeid | code
id
是主键
我想以这种增量顺序在此表中插入数据:
id | storeid | code
1 | 2 | 1
2 | 2 | 2
3 | 2 | 3
4 | 2 | 4
我有两种解决方案来完成此任务。
1)使用PHP触发查询以从表中获取最后一条记录( code
),并使用PHP使用1
递增code
值,然后在第二次查询之后将递增的值插入数据库。
2)这个单一查询: "INSERT INTO qrcodesforstore (storeid,code) VALUES (2,IFNULL((SELECT t.code+1 FROM (select code from qrcodesforstore order by id desc limit 1) t),1))"
我只想建议哪种方法最好,以及为什么要表现。 我目前正在使用第二种方法,但是由于使用三级子查询,因此对性能感到困惑。
您可以将code
列设置为AUTO_INCREMENT
,而无需将其设置为主键,请参见this 。
无论如何,第二种解决方案会更好,只有一个查询比两个更好。
您只需将INSERT与SELECT和MAX()结合使用:
INSERT INTO qrcodesforstore
(storeid, code)
(SELECT 2, IFNULL((MAX(code)+1),1) FROM qrcodesforstore)
将其包装在触发器中:-
DELIMITER $$
DROP TRIGGER IF EXISTS bi_qrcodesforstore$$
CREATE TRIGGER bi_qrcodesforstore BEFORE INSERT ON qrcodesforstore
FOR EACH ROW
BEGIN
DECLARE max_code INT;
SELECT MAX(code) INTO max_code FROM qrcodesforstore;
IF max_code IS NULL THEN
SET max_code := 1;
ELSE
SET max_code := max_code + 1;
END IF
SET NEW.code := max_code;
END
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.