MySQL

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

続きを読む

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

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

$ mysqlimport -u username -p --local dbname tablename.tsv

シェルスクリプト内で実行する場合はこちらが手軽ですね。また大抵の場合、INSERT文を大量に発行するよりも高速にデータを入れることができます。
続きを読む

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

MySQL上のユーザーのパスワードを変更するにはSET PASSWORD文を利用します。

SET PASSWORD FOR katsube@localhost = 'password here';

MySQLのバージョンによって記述方法が異なります(上記は5.7以降の書き方)。また同様のSQLでALTER USER文があり、こちらは有効期限などより細かい設定が可能です。
続きを読む

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

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