LoginSignup
4
8

More than 5 years have passed since last update.

Ruby on Rails + MySQLデータ挿入

Posted at

環境

  • CentOS6.5
  • Rails 5.1.4
  • MySQL 5.7
  • Ruby 2.3.1

RailsでMySQLのテーブル作成で作成したテーブルを使います。

テーブル名:

  • users

カラム:

  • id (BIGINT(20)) <= PK
  • uuid (varchar(255))
  • name (varchar(255))
  • age (int(11))
  • created_at (datetime)
  • updated_at (datetime)

データ挿入

INSERT

user = User.new(uuid: 'ABCDEFG',name: 'newUser', age: 99)
user.save

もしくは

user = User.create(uuid: 'ABCDEFG',name: 'newUser', age: 99)

createはnewとsaveを同時に行ってくれる。便利!!

でも、saveを使うとinsert処理の成功・失敗が返ってくるので処理の成否でその後の処理を分けたい場合はsaveを使うべき。

BULK INSERT

*BULK INSERTそのものについてはこちらを参考
バルクインサート (bulk insert)とは

activerecord-importを使用します。

Gemfileに

gem 'activerecord-import'

を追記し、 bundle installします。

bundle installしたら下記のような処理を書くことによってbulk insertが使用できます。

newUsers = []
newUsers << User.new(uuid: 'AAA', name: 'AAAname', age: 90)
newUsers << User.new(uuid: 'BBB', name: 'BBBname', age: 80)
newUsers << User.new(uuid: 'CCC', name: 'CCCname', age: 70)
User.import newUsers

実際に実行されたSQLが↓です

INSERT INTO `users` (`id`,`uuid`,`name`,`age`,`created_at`,`updated_at`) 
VALUES (NULL,'AAA','AAAname',90,'2017-10-09 05:11:12','2017-10-09 05:11:12'),
(NULL,'BBB','BBBname',80,'2017-10-09 05:11:12','2017-10-09 05:11:12'),
(NULL,'CCC','CCCname',70,'2017-10-09 05:11:12','2017-10-09 05:11:12')
ON DUPLICATE KEY UPDATE `users`.`updated_at`=VALUES(`updated_at`)
4
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
8