带外键的sql循环

时间:2014-02-27 15:37:10

标签: mysql sql rdms

我试图生成一堆折扣代码。这些都有外键关键。

目前我有

INSERT INTO code (title, code, desc) VALUES ('code1','XPISY9','test code');
INSERT INTO code_details (code_id, used, attempts) VALUES (
 SELECT code_id from code where code = 'XPISY9',0,0);

code_details中的code_id是代码表中code_id的外键。

创建循环的最佳方法是什么,我可以生成一组这些值(大约100)。我需要代码是一个不重复的随机值。

任何帮助将不胜感激。

感谢

2 个答案:

答案 0 :(得分:0)

在代码表中有100个左右的记录后,您可以在一个语句中添加代码详细信息:

INSERT INTO code_details (code_id, used, attempts) 
SELECT code, 0, 0
FROM code;

首先生成代码记录是另一回事,最好通过使用其他工具在文本文件中生成100个插入语句来完成,然后再执行。

我已经看到可以使用每种脚本语言完成 - 选择你喜欢的。我甚至看到Excel与id和字符串公式的列一起使用来生成insert语句。

答案 1 :(得分:0)

感谢帮助人员。我决定为此制定一个程序并且效果很好:

DELIMITER $$
CREATE PROCEDURE vouchergen(IN length INT(10) ,IN duration VARCHAR(20),IN sponsor VARCHAR(20),IN amount INT(10))
BEGIN

DECLARE i INT DEFAULT 1;

WHILE (i< amount) DO

SET @vcode= CONCAT(BINARY brand , UPPER(SUBSTRING(MD5(RAND()) FROM 1 FOR 6)));

INSERT INTO code (title, code, desc) VALUES (CONCAT(brand,i),@vcode,CONCAT(length,' ',duration));

INSERT INTO code_details (code_id, used, attempts) VALUES (
 SELECT code_id from code where code = @vcode,0,0);

SET i=i+1;

END WHILE;
END$$;

然后,我可以将其称为gen,但我想要的却是:

CALL vouchergen(1,'week',APPL,400);
CALL vouchergen(1,'month',APPL,100);
CALL vouchergen(1,'day',APPL,200);