Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

[MySQL]データベース上にサンプルデータを追加するRubyスクリプト

More than 3 years have passed since last update.

はじめに

この記事では、MySQLを使ってテーブルを作るところから、Rubyスクリプトでサンプルデータをデータベースに追加するところまでを紹介します。
ちなみに環境はこんな感じです。

$ mysql --version
mysql  Ver 14.14 Distrib 5.7.18, for osx10.12 (x86_64) using  EditLine wrapper

作りたいテーブルはこんな感じ。
データベース名:chatroom
テーブル名:users

カラム名 内容
user_id int, unsigned, not null
name varchar(20), not null
password char(64), not null
prefectures varchar(20), not null

追加したいサンプルデータはこんな感じ。

user_id name password prefectures
1 shinichi hoge gunma
2 ran fuga saitama
3 sonoko fizz ibaraki
4 kogoro buzz tokyo
5 ai ping kyoto

まずは、MySQLでテーブルを作ろう

MySQLに接続

$ mysql -uroot

データベース作成

mysql> create database if not exists chatroom;

データベースが作成できたか確認

mysql> show databases;

データベースへ接続

mysql> use chatroom;

テーブル作成

mysql> create table users (
    -> user_id int unsigned not null,
    -> name varchar(20) not null,
    -> password char(64) not null,
    -> prefectures varchar(256) not null
    -> )engine = InnoDB;

プライマリーキー設定

mysql> alter table users add primary key (user_id);

テーブルが作成できたか確認

mysql> show tables;

カラムの内容を確認

mysql> show columns from users;

つづいて、サンプルデータを追加していこう

ruby-mysqlを導入

$ sudo gem install ruby-mysql

Rubyスクリプトを書く

sampledata.rb
require 'mysql' #ruby-mysql
require 'digest/sha1' #passwordをSHA1でハッシュ化するために必要

# サンプルデータ
names = ['shinichi','ran','sonoko','kogoro','ai'] 
passwords = ['hoge','fuga','fizz','buzz','ping']
prefectures = ['gunma','saitama','ibaraki','tokyo','kyoto']

# MySQLに接続
client = Mysql.connect("127.0.0.1","root","","chatroom") 
#引数:(ホスト名/IPアドレス(127.0.0.1→localhost), ユーザー名, パスワード(最初は設定されてない), データベース名)

# INSERT文
# ここでは値が入る部分を?で設定する
query = client.prepare('insert into users values (?,?,?,?)')

range = 0..4 #4:追加したいデータ数-1
range.each do |num|
  # ここINSERTしたい値を実際に指定している
  query.execute num+1, names[num], Digest::SHA1.hexdigest(passwords[num]), prefectures[num]
  # Digest::SHA1.hexdigest() → 値をSHA1でハッシュ化する関数
  # 今回はpasswordをハッシュ化してからDBに入れています
end

スクリプトを実行

$ ruby sampledata.rb

サンプルデータが追加されたか確認

mysql> select * from users;

まとめ

多くのサンプルデータを毎回SQL文で打ち込むのは大変です。スクリプトを使えばだいぶ効率化すると思います。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away