MySQL

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

MySQLで外部キー制約を適用しているテーブルにはDROP TABLEができません。 本番ではその挙動でもちろん良いのですが、開発中にテーブルをまるごと作り直したいときにはこの制約が邪魔になることがあります。またmysqldumpなどで出力したファイルをインポート…

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

小ネタです。 踏み台サーバであるAmazon Linux2にMySQLのクライアントを入れRDSを操作しているのですが、ある日yum updateをしたら途中で停止してしまいました。 エラーメッセージを眺めるとMySQLをアップデートする際にGPGが原因でコケているっぽい。 $ sud…

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

Node.jsの代表的なO/RMであるSequelizeの第五弾。 これまで以下のような内容を取り上げてきました。 第1回 インストールから基本的な利用方法 第2回 SELECT文の使い方 第3回 トランザクション 第4回 マイグレーション 今回はここまでの情報の整理も兼ねて、…

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

Node.jsの代表的なO/RMであるSequelizeの第四弾。 第1回ではインストールから基本的な利用方法、第2回ではSELECT文の使い方、第3回ではトランザクションを取り上げました。 今回は「マイグレーション」のお話です。 Sequelizeから提供されているCLIツールを…

[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句の条件が複雑になってくると「これS…

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

Node.jsでO/RMと言えば「Sequelize」です。 PostgreSQL, MySQL, MariaDB, SQLite, Microsoft SQL Serverなど主要なRDBに対応しており、AWS上での利用報告もありますのでRDSなどでももちろん使えます。また現在たどれる最古のバージョンv1.1.2は2011年にリリ…

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

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

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

※この記事は専門学校の講義用に作成されたものです PDOはデータベースへのアクセスを抽象化してくれる非常に便利なライブラリですが、ある程度の規模のシステムになってくるとメンテナンス性を向上したくなりもう一段階、抽象化したくなる物です。最近人気の…

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

※この記事は専門学校の講義用に作成されたものです 前回に引き続きPHPからMySQLを操作します。今回のテーマは「トランザクション」への対応です。トランザクションをマスターすれば、2つ以上のSQLを実行した際にいずれかの実行が失敗した場合でも、そのすべ…

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

※この記事は専門学校の講義用に作成されたものです 今回はPHPからMySQLへ接続しデータの取得と追加の練習を行います。 データベースとのやり取りには様々な罠が待ち構えており、ちょっと書き損じた(設定を忘れた)だけでサービスが崩壊することもよくあります…

[PHP] アクセスカウンター用のRESTfulAPIを作成する - その2 DB版

前回作成した「アクセスカウンター」を、今度はデータベースに対応させてみます。裏側を変更するだけなので、表示はまったく同じです。 作戦としてはPHPにリクエストがある度にテーブルに1レコードずつ追加されていき、現在の値はレコード数を集計することで…

[MySQL] テーブルにファイルをインポートする - mysqlimport編

MySQLへCSVなどのテキスト形式のデータファイルを一括でインポートします。 今回はLinuxなどのコマンドとして提供されているmysqlimportを利用します。通常MySQLをインストールした際に自動的に付いてきますのですぐに実行することが可能です。 $ mysqlimpor…

[MySQL] ユーザー名を変更する - RENAME USER

MySQLのユーザー名を変更する場合にはRENAME USER文を利用します。 RENAME USER oldman@localhost TO youngman@localhost;

[MySQL] パスワードを変更する - SET PASSWORD

MySQL上のユーザーのパスワードを変更するにはSET PASSWORD文を利用します。 SET PASSWORD FOR katsube@localhost = 'password here'; MySQLのバージョンによって記述方法が異なります(上記は5.7以降の書き方)。また同様のSQLでALTER USER文があり、こちら…

[MySQL] 権限を剥奪する - REVOKE

MySQLで権限を剥奪(削除)するにはREVOKE構文を使います。 REVOKE ALL ON *.* FROM katsube@localhost; 上記は全権限を剥奪し、初期状態に戻しています。

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

作成済みのユーザーに権限を付与するにはGRANT文を利用します。実行にはGRANTを利用できる権限が必要です。 GRANT ALL On db1.* To katsube@localhost; 上記はdb1という名前のデータベース内にあるすべてのテーブルに全権限を付与しています。

[MySQL] ユーザーを削除する - DROP USER

作成済みのユーザーを削除するにはDROP USER文を使用します。実行にはrootなどのユーザーを削除する権限が必要です。 DROP USER katsube@localhost;

[MySQL] ユーザーを新規に作成する - CREATE USER

MySQLで新規にユーザーを作成する場合、CREATE USER文を実行します。もちろんrootなどユーザーを作成できる権限でログインしておく必要があります。 CREATE USER katsube@localhost IDENTIFIED BY 'password';

[MySQL] rootのパスワードを忘れたので再設定する

AmazonLinux上にインストールしたMySQL5.7のrootのパスワードを忘れてしまったので再設定を行います。 基本的に公式ドキュメントの内容に沿った形で実施していきますが、日本語のドキュメントのバージョンがちょっと古いので5.7に合わせてあります。

[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…

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

MySQLでテーブルをコピーします。 以下の2つのパターンのそれぞれの特徴についてメモします。 パターン1 CREATE TABLE newtable LIKE oldtable; INSERT INTO newtable SELECT * FROM oldtable; パターン2 CREATE TABLE newtable SELECT * FROM oldtable;

macOSにMySQLをHomebrewでインストールする

「Dockerで開発環境を作らないヤツは人にあらず」的な空気を感じる昨今ですが、古来から子々孫々と受け継がれし方法を現代に伝承していく所存であります。 というわけで、HomeBrewでmacOSにMySQLを入れていきます。

LAMP環境をAWS Lightsailで新規に構築する

今回はAWSで気軽にVPSサーバを立てることができるLightsailで、LAMP環境を構築してみます。1台のサーバにWebとDBが同居する形の非常にシンプルな物です。 もともとAnsibleで自動化しようと思ってタスクを洗い出していたのですが、せっかくなのでブログにも残…

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

2013年に作成した個人的なWebサービスがいつの間にか動かくなってる…?と思って調べて見るとPHP経由で動かしているMySQLが以下のようなエラーを吐いていました。 PHP Fatal error: Uncaught Exception: [_runsql] HY000 1526 Table has no partition for val…

MySQLでよく使用するコマンドまとめ - 2018年版

この記事は作成中です。随時更新されます 歳のせいかど忘れすることが増えたためMySQLの操作方法をまとめてメモ。MySQL5.6〜5.7あたりでの利用を想定しています。

[SQL] 複数レコードを1回のINSERTでまとめて挿入する

構文 VALUESをカンマ(,)で区切って指定するだけです。 INSERT INTO `テーブル名` (id, name) VALUES (1, 'foo') , (2, 'bar') , (3, 'hoge'); 通常のINSERTと同様に、すべての列に順番通りデータを追加する場合はカラム名の記述は不要です。 INSERT INTO `テ…

[SQL] レコードがなければINSERT、あればUPDATEする

ここではMySQLでの実行方法を取り上げます。 構文 INSERT句で、ON duplicate key updateを利用することで実現できます。 INSERT INTO `テーブル名` (id, name) VALUES (1, 'りんご') ON duplicate key update id = 1 , name = 'ぱんだ'; ここでは次のような…

データベース(スキーマ)一覧を表示する | MySQL

ここで表示されるのはログイン中のユーザーがGRANTで表示権限が与えられたデータベースのみが表示される点に注意。