MySQL – 主なコマンド

データベース操作

データベース一覧の表示
SHOW DATABASES;
データベースへの接続
USE [database]

テーブル操作

テーブル全体の操作

テーブル一覧の表示
SHOW TABLES;
テーブルの作成
CREATE TABLE [table]([column] [type], [column] [type], ...);
テーブルの複製
CREATE TABLE [dest_DB].[new_table] SELECT * FROM [source_DB].[source_table]
テーブル名の変更
ALTER TABLE [table] RENAME TO [new_table_name];
テーブルの削除
DROP TABLE [table];
テーブル構造の表示
DESCRIBE [table] または DESC [table];

カラム操作

カラムの追加
ALTER TABLE [table] ADD [field] [type];
カラムの名称と型の変更
ALTER TABLE [table] CHANGE [field] [new_field_name] [type];
カラムの型のみ変更
ALTER TABLE [table] MODIFY [field] [type];
カラムの削除
ALTER TABLE [table] DROP COLUMN [field];

レコード操作

全レコード・全フィールドの表示
SELECT * FROM [table];
指定したフィールドの表示
SELECT [field], [field], ... FROM [table];
昇順/降順表示
SELECT [fields] FROM [table] ORDER BY [field] ASC/DESC;
レコードの追加
INSERT INTO [table] VALUES([field], [field], ...);
レコードの削除(全削除に注意)
DELETE FROM [table] WHERE [condition]
全レコードの削除
DELETE FROM [テーブル]
レコードの変更(全変更に注意)
UPDATE [table] SET [field]=[value] WHERE [condition]

テーブルの結合

内部結合/等結合~Inner Join

INNER JOIN句
SELECT [fields]
FROM [table_1] INNER JOIN [table_2]
ON ([table_1].)[key_1] = ([table_2].)[key_2]
WHERE句
SELECT [field], [field], ...
FROM [table_1], [table_2]
WHERE ([table_1].)[キー1] = ([table_2].)[key_2]

抽出カラムの選択

結合後のカラムの限定
SELECT ..., [table].* [table].[field], ... from [table], [table], ...

条件式

値がNULL
[field] IS NULL

MySQL – レコードの検索

フィールド選択

全レコードの全フィールド

指定したフィールド

レコードの条件検索

文字列検索

たとえば国名で検索する場合。

LIKEによるあいまい検索

LIKE指定で任意の文字・文字列を含む検索ができる。

任意の一文字

アンダースコア('_')は任意の一文字に相当。

任意長の文字列

任意長(0文字以上)の文字列に対応するのは'%'

数値検索

年齢の範囲で検索する場合。

上限と下限で検索する場合、ANDで複数条件を結ぶ。

同じ検索条件をBETWEENで指定できる。

対象列挙

IN(...)でカンマで区切った値の何れかと一致するレコードが抽出される。

 

 

QGIS – 融合(Dissolve)

概要

融合処理は、同じ属性条件の複数のポリゴン間の境界を取り除き、一つのポリゴンにする。

シングルパートをマルチパートに変換しても、各々のポリゴンは残っており、その境界線は表示されるが、融合することでそれらが一つのポリゴンとなる。

qgis-disolved-japan

手順

メニューの「ベクタ」→「空間演算ツール」→「Dissolve」でダイアログが開く。

qgis-dissolve-dialog

  • “入力レイヤ”で融合したいレイヤを選択
  • “Dissolve all …”のチェックは、全てのポリゴンを一つにまとめたいときを除いて外す
  • “Unique ID fields”は融合の同一判定に使うフィールドを選択して右へ
  • “融合”は融合後の出力先/Shapeファイルの場合はshpファイル名で指定する
  • “アルゴリズム実行後に・・・”は実行終了後にレイヤを表示させたいときにチェック

処理時間

QGISによる融合処理には非常に長い時間がかかる

たとえば国土数値情報の市区町村別行政界データを都道府県でまとめるのに、Intel Core i5、メモリ4GB、Windows10の条件下で6時間ほどかかった。

5時間過ぎるまでほとんどフリーズしたかのような状態になり、最後の20~30分くらいでプログレスバーが表示され(進捗率27%)、そこからは(それまで待たされた時間と比べれば)進みが早い。

隣接する二つの市の融合が終わるまで数分、徳島県と高知県の市町村を両県にまとめるのに15分くらい。離島や港湾地域のややこしい形があると、より実行時間が長くなるものと推測される。

属性データ

融合の際にユニークフィールドとして都道府県名を指定すると、同じ都道府県名の市区町村の属性データが複数存在するが、融合後のポリゴンの属性としては一つしか残らない。

融合前のユニークキーが同じデータの先頭行のデータが融合後の属性データとなるが、ほとんどの場合はこれは意味を持たないため、別にデータをセットする必要がある。

簡素化の効果

簡素化(Simplify)の効果は大きく、全国レベルでポリゴン境界の齟齬が殆ど目立たない程度の簡素化で、大幅に(数時間→数分)処理時間が短縮される

さくらサーバー – MySQL – CSVファイルのインポート

概要

ローカルでつくったCSVファイルをさくらレンタルサーバにアップロードしてテーブルに読み込む手順。

  1. CSVファイルを準備する
  2. CSVファイルをアップロードする
  3. MySQLにログオン(ファイルを読めるようにするオプションが必要)
  4. ファイルをテーブルに読み込む。

CSVファイルの準備

  1. 表計算ソフトでCSVファイルを作成して保存
  2. Excelの場合は文字コードにUTF-8を指定できないので、エディタで読み込んで文字コードと改行コードを指定して保存
    • 文字コードはUTF-8
    • 改行コードはLF

CSVファイルのアップロード

さくらレンタルサーバの場合、ファイルのアップロード先は~/www/のディレクトリ下。フルパスだと、/home/USERNAME/www

必要に応じてファイルの場所を移動。

MySQLへのログイン

MySQLがローカルファイルから読み込めるよう、--enable-local-infileオプションをつけてログイン。

ファイルの読み込み

  • コマンドはLOAD DATA INFILEコマンド
  • サーバにアップロードしたファイルをローカルで読み込むので”LOAD DATA LOCAL INFILE ...“とする
  • コマンドが長いので、エディタなどで複数行に打ち込んで、コンソールへコピー・ペースト

改行がCR+LFの場合、LINES TERMINATED BY "\r\n"を付加する。

実行例

以下のようなテストファイルを用意してアップロードしておく。

 

 

 

コンソールでのMySQLの文字化け

症状

コンソールからテーブルに、日本語を含んだレコードを追加すると文字化けしてしまう。

たとえば以下のようなデータを持つテーブルがあるとする。

これをそのままSELECTコマンドで表示させると、以下のように文字化け。

WHERE句で無理矢理元の文字列’山田’で探そうとすると、以下のようなエラーが出る。

これはその文字列は存在しているがコードが違うと言われているようだ。

そこでMySQLのcharacter_set群がどのように設定されているかを確認。確認コマンドは以下の形式。

以下、実行結果。

さくらレンタルサーバでDBを追加する際の文字コード指定はUTF-8としていて、ターミナル側の設定はUTF-8だが、ほとんどがujis = EUC_jpになっている。

対策

MySQLにログインした後、一度だけ以下を実行する。

以下、実行例。

適切に表示され、chracter_set変数群も_serverを除いて全てUTF-8になっている。

なお、SET CHARSET utf8での文字コード設定を説明しているサイトが殆どだが、この方法だと文字化けはなくなるが、カラム幅が崩れてしまう。この時のcharacter_setの設定値は上と同じに変更されるが表示のされ方が違う。

対策・改

その後、MySQLに入る時に以下を実行する方法も知った。--default-character-set=utf8mb4を指定する。

この結果文字コードは以下のようになって、文字化けも解消。

20210604

 

MySQL – カラムの追加・変更・削除

カラムの追加

最後尾に追加

以下のコマンドで最後尾に新しいカラムが追加される。追加されたカラムのフィールド値には初期値が設定される。

以下、実行例。

先頭に追加

FIRSTを指定すると、新たな列が先頭に追加される。

指定位置への追加

AFTERで指定したカラムの後に新たな列が追加される。

カラムの変更

名称と型の変更

カラムの名前や型の変更ALTERコマンドを使う。

CHANGEでフィールド名と型を同時に変更する。

以下、実行例。

型のみの変更

型のみの変更はMODIFY

以下、実行例。

 

カラムの削除

以下のコマンドで、指定したカラムを削除できる。

以下、実行例。

 

 

MySQL – レコードの追加・変更・削除

レコードの追加

全フィールド追加

INSERT INTO ~ VALUESコマンドで、全フィールドの内容をフィールドの順番通りに追加する。

以下、実行例。

フィールドを指定した追加

フィールドを指定した実行は次の通り。

以下、実行例。

フィールドの一部だけを指定すると、指定していないフィールドには初期値が設定される。

レコードの変更

レコードのフィールド値の変更はUPDATE ~ SET ~ WHEREコマンドを使う。

以下、実行例。

UPDATEの注意点

UPDATEコマンドは必ずWHEREで対象となるレコードを指定する。さもないと、全レコードのフィールドが指定した内容で変更されてしまう。

レコードの削除

レコードの削除は、DELETE FROM ~ WHEREコマンドで行う。

以下、実行例。

DELETEの注意点

DELETEコマンドでWHEREを省略すると、全データが削除されてしまうので注意。

 

QGIS – マルチポリゴン化

マルチポリゴンの意義

国土数値情報の行政界データでは、離島や飛び地がある自治体はそれぞれが独立したポリゴンとなっていて、それぞれに同じ自治体名が付けられている。ただし自治体番号の後ろに連番を付けた番号が付けられている。

これら同じ自治体に複数のポリゴンがある場合、自治体オブジェクトとしては一つとして、それが複数のポリゴンをもつようなマルチポリゴンにする方が有効な場合が多い。

たとえば自治体単位での面積を求める場合、一つの自治体を指定すれば全ポリゴンの面積を加えられる。またラベルを表示する場合、マルチポリゴンにしなければ一つひとつの島や飛び地にも自治体名が表示されてしまうが、集約すれば一つの自治体に一つだけラベルが付けられる。

マルチポリゴンのほかにはラインやポイントを集約する場合もあり、それらは総称してマルチパートと呼ばれている。これに対して一つのオブジェクトに一つのポリゴンが対応しているのをシングルポリゴン(シングルパート)と呼ぶ。

QGISでのマルチポリゴン化

QGISでシングルポリゴンをマルチポリゴンに変更するには以下のように操作する。

  1. メニューから「ベクタ」→「ジオメトリツール」→「シングルパートをマルチパートに集約」
  2. 集約のキーとなるユニークなフィールドを指定
  3. 集約後のshpファイルを保存する場所とファイル名を指定
  4. 実行

まずメニューから「シングルパートをマルチパートに集約」を選択。

 

注意点

処理時間

全国のデータをマルチパート化するとかなり時間がかかる。Core i5のマシンで2時間近くかかった。

マルチパートのデータ

シングルパーツのオブジェクトが面積などのデータを持っていた場合、マルチパートに集約すると、先頭のアイテムのデータが代表となってマルチパートのデータになる。

行政改データの境界未定地

行政界データをマルチポリゴン化する場合、集約キーとなるユニークフィールドに市町村名を用いると、各都道府県の所属未定地が全国で同じ名前となり、ひとまとめになってしまう。これを回避するため、新たにフィールドをつくり、値を都道府県名+市町村名とすれば、所属未定地も都道府県単位で分割される。

 

MySQL – テーブルの追加・確認・変更・複製・削除

追加

テーブルの追加

テーブルの追加はCREATE TABLEコマンドで行う。

以下、実行例。

カラムの追加

テーブルにカラムを追加する場合はALTER TABLE ... ADDを使う。

確認

テーブル一覧の確認

テーブル一覧の確認はSHOW TABLESコマンド。

テーブル構造の確認

テーブル構造の確認はDESCまたはDESCRIBEコマンド。

変更

テーブル名の変更

テーブルのカラム名・カラムの型の変更

テーブルのカラム名やカラムの型の変更ALTER TABLE ... CHANGEALTER TABLE ... MODIFYで行う。

複製

テーブルの複製

テーブルの複製は、MySQLの場合、CREATE TABLEとSSELECT文を組み合わせる。

削除

テーブルの削除

テーブルの削除はDROP TABLEコマンド。

テーブルのカラムの削除

テーブルのカラムを削除する場合はALTER TABLE ... DROP COLUMNとする。

 

MySQL – データベースの作成・権限付与・削除

データベースの作成

基本コマンド

データベースの作成はCREATE DATABASEコマンドを使う。

文字コードと照合順序

データベースの文字コードと照合順序(COLLATE~照合順序)を指定して作成するコマンド。

CREATE DATABALSE db_name CHARACTER SET char_set COLLATE collation_name;

たとえばutf8mb4の場合の例

さくらレンタルサーバー

さくらレンタルサーバーの場合はwebのコントロールパネルでデータベースを作成・削除する方法のみが示されていて、コンソールでのコマンド操作はエラーとなる。

データベースアクセスの権限設定

必要に応じて、ユーザーへのデータベースアクセスの権限を設定する。

GRANT ALL PRIVILEGES ON dbname.* TO dbuser@'localhost'

データベースの削除

データベースの削除にはDROP DATABASEコマンドを使う。

存在しないデータベースを削除しようとするとエラーになるが、DROP DATABASE IF EXISTSコマンドを使うと、データベースが存在しない場合もエラーにならない。