私はSQLを初めて使用し、自動車販売店の基本的なデータベースを作成しています。年の範囲(1950年から2014年)を保持する必要があるテーブル「年」があります。
それ以外の
INSERT INTO 'Years' ('year') ("1950");
INSERT INTO 'Years' ('year') ("1951");
INSERT INTO 'Years' ('year') ("1952");
などなど…
テーブルにデータを追加する簡単な方法はありますか?
アプリケーションにそのようなテーブルが必要かどうかを議論することとは別に、MySQL 側でテーブルを事前設定するタスクはいくつかの方法で解決できます。
最初で最速の方法は、次の例のように、db に永続化するか、その場で生成できる集計 (数値) テーブルを使用して 1 つのステートメントで実行することです。
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のデモです
2番目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のデモです
コードを再考する必要があります。そのようなテーブルは決して必要ありません...そのテーブルで何をしていても、それがなくても確実に実行できます。
それでもテーブルを作成したい場合は、ループを使用する必要があります。
たとえば、php を使用している場合:
for ($i = 1950; $i <= 2014; $i++){
mysqli->query("INSERT INTO 'Years' ('year') (".$i.")");
}