SQL

[Node.js] SequelizeでMySQLを利用する – その5「ToDoアプリ作成編」

Node.jsの代表的なO/RMであるSequelizeの第五弾。

これまで以下のような内容を取り上げてきました。

  1. 第1回 インストールから基本的な利用方法
  2. 第2回 SELECT文の使い方
  3. 第3回 トランザクション
  4. 第4回 マイグレーション

今回はここまでの情報の整理も兼ねて、簡単なToDoアプリを作ってみようと思います。

続きを読む

[Node.js] SequelizeでMySQLを利用する – その4「マイグレーション編」

Node.jsの代表的なO/RMであるSequelizeの第四弾。

第1回ではインストールから基本的な利用方法、第2回ではSELECT文の使い方、第3回ではトランザクションを取り上げました。

今回は「マイグレーション」のお話です。
Sequelizeから提供されているCLIツールを利用すると、モデルの内容をコマンド一発でMySQLへ反映することができます。最初の1回目だけではなく運用開始後に差分を反映することもできます。他のフレームワークなどでも見かけますよね。Ruby on Railsで初めてこの手のツールを触ったときは感動したものですw


続きを読む

[Node.js] SequelizeでMySQLを利用する – その2「SELECT文編」

Node.jsの代表的なO/RMであるSequelizeの第二弾。

前回はインストールから基本的な利用方法までを取り上げました。今回はSELECT文にまつわるトピックスを取り上げていきます。

Sequelizeに限った話ではないですが、WHERE句の条件が複雑になってくると「これSQL書いた方が早くね?」という気持ちになりますねw
続きを読む

[Node.js] SequelizeでMySQLを利用する – その1「チュートリアル編」

Node.jsでO/RMと言えば「Sequelize」です。

PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Serverなど主要なRDBに対応しており、AWS上での利用報告もありますのでRDSなどでももちろん使えます。また現在たどれる最古のバージョンv1.1.2は2011年にリリースされていることからすでに10年以上の歴史がありもちろん現在もメンテナンスが継続しています。これは安心して利用できますね!

というわけで今回はSequelizeを初めて触るチュートリアルとしてまとめていきます。現行バージョンであるv6のドキュメントを元にしています。
続きを読む

[PHP] MySQLをPDOで操作する – 入門編 その3「モデル編」

※この記事は専門学校の講義用に作成されたものです

PDOはデータベースへのアクセスを抽象化してくれる非常に便利なライブラリですが、ある程度の規模のシステムになってくるとメンテナンス性を向上したくなりもう一段階、抽象化したくなる物です。最近人気のLarabelや、古くから利用されているCakePHPSymfonyなどのフレームワークには標準で搭載されている機能の簡易版を今回は学習がてらスクラッチで作ってみたいと思います。
続きを読む

[PHP] MySQLをPDOで操作する – 入門編 その2 「トランザクション」

※この記事は専門学校の講義用に作成されたものです

前回に引き続きPHPからMySQLを操作します。今回のテーマは「トランザクション」への対応です。トランザクションをマスターすれば、2つ以上のSQLを実行した際にいずれかの実行が失敗した場合でも、そのすべてを無かったことにできちゃいます。

データベースは堅牢に作ってあるとは言え、いつ障害など不測の事態が発生するか分かりません。データベースはユーザーの個人情報やお金など非常に重要なデータを扱うこともありますからうまく動作しなかった場合には元の健全な状態に戻して上げる必要があるというわけです。つまり、めちゃめちゃ重要なのです←語彙w
続きを読む

[PHP] MySQLをPDOで操作する – 入門編 その1

※この記事は専門学校の講義用に作成されたものです

今回はPHPからMySQLへ接続しデータの取得と追加の練習を行います。

データベースとのやり取りには様々な罠が待ち構えており、ちょっと書き損じた(設定を忘れた)だけでサービスが崩壊することもよくあります。誇張ではなく日常的に発生しており、例えばゲームやWebサービスがローンチしたとき、またはメンテナンスが開けたとき、サーバにまともにつながらずTwitterなどで話題になっているのを目にしますよね。またデータベースは個人情報はもとより、お金にまつわるデータも取り扱いますのでセキュリティにも気をかける必要がありますが、下手をすると漏洩や改ざんの温床になりかねません。

人類にデータベースは早すぎるのかもしれないと私もよく感じていますが、しかしながらこれらの事故の大半は「うっかりミス」だったりもします。情報をアップデートし続ける必要はありますが、基本や定石に忠実に従っていればトラブルを未然に防ぐことも可能です。このシリーズではそんな定石についてもおいおい取り上げていきたいと思います。

続きを読む

[MySQL] 権限を付与する – GRANT

作成済みのユーザーに権限を付与するにはGRANT文を利用します。実行にはGRANTを利用できる権限が必要です。

GRANT ALL On db1.* To katsube@localhost;

上記はdb1という名前のデータベース内にあるすべてのテーブルに全権限を付与しています。

続きを読む

[MySQL] テーブル名を変更する

MySQLでテーブル名を変更するには、通常RENAME TABLEを利用します。

RENAME TABLE old_table TO new_table;

テーブル名の変更はSQLの標準規格には存在しません。そのため各DBが独自の実装をしているのが現状です。これもMySQLでの利用方法ですので、他のDBを使う際にはご注意ください。

続きを読む

[MySQL] AUTO_INCREMENTの値を設定/確認する

MySQLのAUTO_INCREMENTの値を確認したり設定します。

値を設定する

ALTER TABLE tbl AUTO_INCREMENT = 100;

値を確認する

SELECT AUTO_INCREMENT
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'test'  /* testデータベース */
AND    TABLE_NAME   = 'foo';  /* fooテーブル */

それぞれ詳しく見ていきます

続きを読む

[MySQL] テーブルをコピーする

MySQLでテーブルをコピーします。
以下の2つのパターンのそれぞれの特徴についてメモします。

パターン1

CREATE TABLE newtable LIKE oldtable;
INSERT INTO newtable SELECT * FROM oldtable;

パターン2

CREATE TABLE newtable SELECT * FROM oldtable;

続きを読む

MySQLのテーブルにPartitionを追加/削除/確認する

2013年に作成した個人的なWebサービスがいつの間にか動かくなってる…?と思って調べて見るとPHP経由で動かしているMySQLが以下のようなエラーを吐いていました。

PHP Fatal error:  Uncaught Exception: [_runsql] HY000 1526 Table has no partition for value 20180827

どうやら開発当初に設定したMySQLのpartitionをすべて使い切ってしまったようです。アクセスログ用のテーブルで5年分くらいのpartitionをまとめて切っていたのですが、まさか5年後も動かしているとは夢にも思わずw (もしくは将来の自分が何とかするだろうと思っていたらしいw)

今回はこいつを動くようにします。
続きを読む