[MySQL] 外部キー制約を一時的に無効にする

MySQLで外部キー制約を適用しているテーブルにはDROP TABLEができません。

本番ではその挙動でもちろん良いのですが、開発中にテーブルをまるごと作り直したいときにはこの制約が邪魔になることがあります。またmysqldumpなどで出力したファイルをインポートする際にも、テーブルを順番通りインポートする必要が出てきます(外部キー制約があるとインポートに時間もかかりますよね)。

そういったときにforeign_key_checksの値に「0」をセットすることで一時的に外部キー制約を無効にすることができます。

SET foreign_key_checks = 0;

再び有効にするには「1」を代入します。

SET foreign_key_checks = 1;
続きを読む

[MySQL] アップデート時にGPGキーのエラーで停止してしまう場合

小ネタです。 踏み台サーバであるAmazon Linux2にMySQLのクライアントを入れRDSを操作しているのですが、ある日yum updateをしたら途中で停止してしまいました。

エラーメッセージを眺めるとMySQLをアップデートする際にGPGが原因でコケているっぽい。

$ sudo yum update
(中略)
warning: /var/cache/yum/x86_64/2/mysql57-community/packages/mysql-community-libs-5.7.37-1.el7.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 3a79bd29: NOKEY
file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql から鍵を取得中です。

The GPG keys listed for the "MySQL 5.7 Community Server" repository are already installed but they are not correct for this package.
Check that the correct key URLs are configured for this repository.

 Failing package is: mysql-community-libs-5.7.37-1.el7.x86_64
 GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

RPMyumではパッケージが改ざんされているか検証するためにGPGキーを利用していることがあるのですが、このGPGキーには有効期限が設定されている関係で一定期間が経つと検証が行えなくなりインストールが停止してしまいます。パッケージを作成する際にGPGキーを別の物に変更した場合も同様の現象になります。

続きを読む

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

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

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

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

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


www.youtube.com

続きを読む

[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を利用する - その3「トランザクション編」

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

第1回ではインストールから基本的な利用方法、第2回ではSELECT文の使い方を取り上げました。今回はINSERTやUPDATEなど更新系の処理に欠かせない「トランザクション」です。

続きを読む

[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のドキュメントを元にしています。

続きを読む

[MySQL] テーブルにカラムを追加/変更/削除する - ALTER TABLE

MySQLでテーブルのカラム(列)の変更を行うにはALTER TABLEを利用します。ALTER TABLEはカラム以外にもテーブルのあらゆる変更が行える万能選手ですが今回はカラムの追加,変更,削除に特化して見ていきます。

カラムを追加する

-- テーブルの末尾に追加
ALTER TABLE tablename ADD colname varchar(64);

-- テーブルの先頭に追加
ALTER TABLE tablename ADD colname varchar(64) FIRST;

-- 指定カラムの後ろに追加
ALTER TABLE tablename ADD colname varchar(64) AFTER id;  -- idの後ろに追加

カラムを変更する

-- カラム名とデータ型を変更
ALTER TABLE tablename CHANGE old_colname new_colname integer;

-- カラム名だけを変更(MySQL8.0〜)
ALTER TABLE tablename RENAME COLUMN old_colname TO new_colname;

カラムを削除する

ALTER TABLE tablename DROP colname;
続きを読む