1

私はSQLを初めて使用し、自動車販売店の基本的なデータベースを作成しています。年の範囲(1950年から2014年)を保持する必要があるテーブル「年」があります。

それ以外の

INSERT INTO 'Years' ('year') ("1950");
INSERT INTO 'Years' ('year') ("1951");
INSERT INTO 'Years' ('year') ("1952");

などなど…

テーブルにデータを追加する簡単な方法はありますか?

4

2 に答える 2

3

アプリケーションにそのようなテーブルが必要かどうかを議論することとは別に、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のデモです

于 2013-09-29T01:07:25.283 に答える
2

コードを再考する必要があります。そのようなテーブルは決して必要ありません...そのテーブルで何をしていても、それがなくても確実に実行できます。

それでもテーブルを作成したい場合は、ループを使用する必要があります。

たとえば、php を使用している場合:

for ($i = 1950; $i <= 2014; $i++){
    mysqli->query("INSERT INTO 'Years' ('year') (".$i.")");
}
于 2013-09-29T00:39:44.463 に答える