1万件のレコードの追加方法、主キーは億単位で不規則

このQ&Aのポイント
  • 主キーのデータを自動増分せずに数千万単位の数字で追加する方法
  • フィールド数が複数あり、同じ値でも構わない1万件のレコードを追加する手順
  • auto_incrementを使わずに1万件のレコードを追加する方法
回答を見る
  • ベストアンサー

1万件のレコードの追加方法、主キーは億単位で不規則

テスト用のテーブルを作りたいと思っています。しかし、主キーの部分が実際とはかけ離れた状態になってしまいます。 フィールド数が複数あり、同じ値でも構わないので1万件分のレコードを追加したいです。 やり方としては、 <1>主キーのフィールド以外の全部のフィールドを作ってデータを入れます。 <2>そしてから、INSERT INTO `aaa` SELECT * FROM `aaa`を1万件超えるまで繰り返し実行。 <3>主キーのフィールドをauto_increment指定して追加します。 <4>1万を超えるフィールドを削除するためにDELETE FROM `aaa` WHERE id>10000を実行 ※実際には主キーにauto_incrementを入れません。 ※実際には主キーのデータは数千万~億単位(89234521や000455839)の数字(型はBIGINT)で、増加の仕方はまちまちです。 auto_incrementを使わず、数千万単位の数字で、増加の仕方もまちまちな主キーのデータを追加する方法はないでしょうか。

  • MySQL
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

ちょっとやってみました rand()を使って上がる率を調整します。 //準備 create table aaa (id int not null unique key); insert into aaa values(1); //この2行を、必要な回数実行 SET @NUM=0,@MIN=1,@MAX=10; INSERT INTO aaa SELECT (@NUM:=@NUM+FLOOR(@MIN + (RAND() * (@MAX-@MIN+1))))+a.id FROM aaa inner join (select max(id) as id from aaa) as a on 1

juju-juju
質問者

お礼

すごく参考になりました。本当に有難うございます。

関連するQ&A

  • 主キーを指定してフィールドを1万行追加するには

    フィールドがいくつかあるテーブルがあります。 主キーが78532456から始まり、1ずつ増加します。 これを1万行追加したいです。 MYISAMでやっています。 どのようにすれば、重複な値を出さずに追加できますか。

    • ベストアンサー
    • MySQL
  • 登録したレコードの主キーの取得方法

    主キーに自動インクリメント( nextval )を使用しているテーブルで、 そこにレコードを登録したときにそのとき使われた主キー を取得する方法はありますでしょうか。 例えば 主キー|データ 1|AAA 2|BBB 3|CCC にDDDと登録したら恐らくは4になるのですが、 主キー|データ 1|AAA 2|BBB 3|CCC 4|DDD ←追加された データを登録したときにその主キーに何が使われたかが知りたいです が知りたいです。 自分で考えてる方法は今の主キーで使ってるシーケンス+1が割り当てられる(だろう)というやり方なのですが、複数のレコード登録が同時にあった場合に不整合が起きるのでどうしたものかと困ってます。 なにか良い方法をご存知の方いらっしゃいましたらお教えください。

  • Accessの主キーについて

    お願いいたします。 Accessの主キー設定について教えてください。 主キーの役割は、テーブルの中のレコードを区別 するための機能だと思いますが、 フィールドのデータ型をオートナンバー型にして おけば主キーの設定は必要ないのではないでしょう か? 主キーを設定する理由としては、参照整合性のため に行うという考え方で良いでしょうか? また、複数の主キーを設定するという場合のテーブ ル構成はどのような場合のシステムなのでしょうか? どうぞ教えてください。

  • Accessでの新規レコードの追加の方法

    Windows XP上でMicrosoft Access 2000を使用しています。 オートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加したいのですが、クエリやそれを基にしたフォームを介した方法はもちろんのこと、テーブルをデータシートビューで表示した状態でも追加することができません。 例えばレコードセレクタからレコード追加を選んでレコード保存を選んでも追加されません。 このテーブルに別のフィールドを追加してデータを入れるとレコードの追加が可能なのですが、オートナンバー型フィールド1つのみではうまくいきません。 どなたかオートナンバー型フィールド1つのみを含むテーブルに新規レコードを追加する方法を御存知でしたら御教示下さいませ。

  • 主キーやオートインクリメントの事教えて!!!

    はじめまして。私は今ショッピングサイトを作ろうとしているものです。 データベース、Mysqlのプロフェッショナルに質問したいことがあります。 今作ろうとしているショッピングサイトでは顧客登録機能を付けようと思っています。顧客の主キーはメールアドレスにしようと思っているのですがいいんでしょうか? もちろん登録するときにメールアドレスが重複していないかのチェックはかけるので重複することはないと思いますがどうなんでしょう? またメールアドレスは顧客変更で変更される場合もあります。ですから主キーが変わるということになります。(変更時にもプログラムで重複チェックをかけるので重複はしないですが) それか別にオートインクリメントなどを主キーにするほうがいいでしょうか? 例 オートインクリメント メールアドレス 名前 住所 etc・・・ これなら主キーは一意にできますが知り合いから聞いた話ではオートインクリメントはあまり主キーなどに使わないほうがいいと聞きました。 皆さんならどんな感じのテーブルを作成しますか?

    • ベストアンサー
    • MySQL
  • MDB内既存テーブルに主キーのフィールド追加は可能か?

    DAOでMDBにアクセスするシステムなのですが、 テーブル仕様変更に伴い、既存のテーブルに新規に主キーとなるフィールドを追加します。 当テーブルはすでに主キーは複数存在しています。 現在は CreateIndex("PrimaryKey")を行ったのですが、 「既に主キーは既に存在しています」と表示されてしまい、異常終了をしてしまいます。 単にフィールド追加することは容易なのですが、主キーとなると、だめみたいです。 この場合は、どのようにすれば良いのでしょうか? 大変申し訳ございません。 ご教授よろしくお願い致します。

  • オートインクリメントの数字について

    私はアクセスを使ってデータを管理しているものです。 管理番号をオートインクリメントしてるのですが、そこで問題が発生しています。 オートインクリメントでどんどん数字が増える状態になり、データが必要なくなってしまったのでそのデータを削除しました。 次に同じテーブルに新しいデータが入ってきたので、削除した後にフィールドを追加するとオートインクリメントする管理番号が数字の1からスタートするのではなく、昔、削除したフィールド数からカウントしてしまいます。 どうかアドバイス頂けないでしょうか? お願いします。

  • 主キーはオートナンバー型のIDを使った方が良いのか

    主キーはオートナンバー型のIDを使った方が良いのか、 独自の主キーを作った方がいいのか? 今は テーブル1 ------------------- IDフィールド(オートナンバー型) 主キー 1 2 3 ------------------- 伝票番号フィールド A001 A001 A002 ------------------- 部署フィールド 営業部 システム部 営業部 ------------------- 金額フィールド 100 200 300 ------------------- という状態ですが、 新たに主キーフィールドを作り 更新クエリで UPDATE テーブル1 SET テーブル1.主キー = [テーブル1]![伝票番号] & [テーブル1]![部署] & [テーブル1]![金額]; をして、主キーを独自に作った方がいいのか。 アクセスを作るにおいて、どちらの方が良いのでしょうか? テーブルのレコードは削除したりする事もあるので、オートナンバー型だと空きができてしまいます。 レコードに空きができないデータベースなら、オートナンバー型、 空きができるデータベースなら、独自に作った主キーにしたほうがいいのでしょうか?

  • データベースと正規化とINSERT文について

    ただいま以下の一つのテーブルを正規化しようとしています。 テーブル:英単語 フィールド:単語、意味1、意味2、意味3、品詞、分類1、分類2、分類3、例文、難易度、ID(主キー・オートインクリメント) これを以下のように分けました。(分類とは単語の分類です。例えば year なら意味は 年 で分類は 時間 とか 単位 とか属性を入れたいのです。) ****** テーブル:英単語 フィールド:単語、意味1、意味2、意味3、分類ID、分類ID、分類ID、例文ID、難易度、ID(主キー・オートインクリメント) テーブル:分類 フィールド:分類名、ID(オートインクリメント 主キー) テーブル:品詞 フィールド:品詞名、ID(オートインクリメント 主キー) テーブル:例文 フィールド:例文、ID(オートインクリメント 主キー) ****** (1)これで正規化できているでしょうか? もしできていないなら、どうすればよいでしょうか? (2)また、仮にこのままデータベースを作るとすると、INSERTの時に英単語テーブルの分類IDに、分類テーブルのIDをひもづけるにはどうしたら良いのでしょうか? INSERT INTO 分類 (分類名) VALUES("時間") のあと、オートインクリメントされたIDを取り出して、英単語テーブルに入れるにはどうしたらいいでしょうか。

    • ベストアンサー
    • MySQL
  • 「Duplicate entry '1' for key 'PRIMARY'」というエラー。

    mysql> show fields from do; +-----------+------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +-----------+------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | parent_id | int(11) | YES | | 0 | | | data_time | bigint(20) | YES | | NULL | | | text | text | YES | | NULL | | +-----------+------------+------+-----+---------+----------------+ というテーブルに、 insert into do values (1,1,1,'kkk'); などと、SQL文を実行すると、 Duplicate entry '1' for key 'PRIMARY' というエラーが出ます。 これはどういう意味のエラーなのでしょうか?

    • ベストアンサー
    • MySQL