我的表格有以下结构:
id | storeid | code
id
是主键的位置
我想在此表中使用增量顺序插入数据,如下所示:
id | storeid | code
1 | 2 | 1
2 | 2 | 2
3 | 2 | 3
4 | 2 | 4
我有两个解决方案来完成这项任务。
1)触发查询以从表中获取最后一条记录(code
),并使用PHP将code
的值增加1
,然后在第二次查询后将该增量值插入数据库中
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))"
我只是想知道哪种方法最好,为什么表现。 我目前正在使用第二种方法但是因为我使用三级子查询而混淆了性能。
答案 0 :(得分:0)
答案 1 :(得分:0)
您可以将code
列设置为AUTO_INCREMENT
,不需要将其设置为主键,请参阅this。
无论如何,第二种解决方案会更好,只有一种查询优于两种。
答案 2 :(得分:0)
你可以使用INSERT和SELECT和MAX():
INSERT INTO qrcodesforstore
(storeid, code)
(SELECT 2, IFNULL((MAX(code)+1),1) FROM qrcodesforstore)
答案 3 :(得分:0)
将其包裹在触发器中: -
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