我是 SQL 的新手,正在为一家汽车经销商创建一个基本数据库。我有一张表“年”,我需要保存一系列年份(1950 - 2014)。
代替
INSERT INTO 'Years' ('year') ("1950");
INSERT INTO 'Years' ('year') ("1951");
INSERT INTO 'Years' ('year') ("1952");
等等等等......
有没有更简单的方法来填充表格?
最佳答案
除了讨论这样一个表对您的应用程序的必要性之外,在 MySQL 端预填充表的任务可以通过多种方式解决。
第一个也是最快的是在一个语句中使用一个计数(数字)表来完成它,该表可以持久保存在您的数据库中,或者像下面的示例一样动态生成它
INSERT INTO years (`year`)
SELECT 1950 + q.n - 1
FROM
(
SELECT a.N + b.N * 10 + 1 n
FROM
(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a
,(SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b
ORDER BY n
) q
WHERE q.n <= 2014 - 1950 + 1
子查询生成一个从 1 到 100 的数字序列。如果您需要跨越 100 年以上的范围,那么您可以对其进行调整,或者如果您进行了很多此类查询,则可以将其替换为持久计数(数字)表。
这是 SQLFiddle 演示
第二种方法是创建一个使用LOOP
和准备好的语句的存储过程
DELIMITER $$
CREATE PROCEDURE populate_years(IN _start_year INT, IN _end_year INT)
BEGIN
PREPARE stmt FROM 'INSERT INTO years (year) VALUES(?)';
SET @y = _start_year;
START TRANSACTION;
WHILE @y <= _end_year DO
EXECUTE stmt USING @y;
SET @y = @y + 1;
END WHILE;
COMMIT;
DEALLOCATE PREPARE stmt;
END$$
DELIMITER ;
这是 SQLFiddle 演示
关于mysql - 将一系列年份插入表中的 SQL 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19073132/