MySQL のスニペット集
このページは、MySQL のスニペットをまとめる予定のページです。
目次
注意
- このページを作ったひとが備忘のためにまとめているため網羅性はありません。
mysqldump
などのコマンド操作は MySQL のコマンド操作 にあります。
スニペット
文字列の結合
SELECT CONCAT(sei, mei) FROM user;
-- SET @@session.sql_mode='PIPES_AS_CONCAT';
SELECT sei || mei FROM user;
LIKE
SELECT * FROM user WHERE name LIKE '100\%' ESCAPE '\\';
システム変数の表示
SHOW VARIABLES;
SHOW GLOBAL VARIABLES;
SHOW VARIABLES LIKE '%char%';
変数のセット
SET @変数名 = 値やクエリなど;
SET @count = (SELECT COUNT(*) FROM foo);
SELECT @count;
CSV インポート
LOAD DATA LOCAL INFILE 'ファイルパス' INTO TABLE テーブル名
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES STARTING BY '' TERMINATED BY '\r\n'
IGNORE 0 LINES;
SET character_set_database=sjis;
LOAD DATA LOCAL INFILE 'ファイルパス' INTO TABLE テーブル名
FIELDS TERMINATED BY ',' ENCLOSED BY '"' ESCAPED BY '\\'
LINES STARTING BY '' TERMINATED BY '\r\n'
IGNORE 0 LINES;
トランザクションの開始
BEGIN; -- or START TRANSACTION;
-- INSERT 等のクエリ...
COMMIT; -- ロールバックする場合は ROLLBACK;
トランザクション特性 (分離レベル) の指定
SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
SET SESSION TRANSACTION ISOLATION LEVEL SERIALIZABLE;
- MySQL :: MySQL 8.0 Reference Manual :: 13.3.7 SET TRANSACTION Statement
SET SESSION TRANSACTION
の場合は現在のセッション内のすべてのトランザクションに、SET GLOBAL TRANSACTION
の場合は以降のすべてのセッションのトランザクションに適用されます。
トランザクション特性の確認
SELECT @@tx_isolation;
SELECT @@GLOBAL.tx_isolation;
行ロック
SELECT 列名 FROM テーブル名 WHERE 抽出条件 FOR UPDATE;
- MySQL :: MySQL 8.0 Reference Manual :: 15.7.2.4 Locking Reads
- すでにロックがかかっていたらすぐにエラーにする場合は
FOR UPDATE NOWAIT
を使用します。(NOWAIT
を付与しない場合は、COMMIT
やROLLBACK
でロックが解除されるまで待つ形になります)
実行計画の確認
EXPLAIN クエリ;
EXPLAIN SELECT * FROM foo;
CREATE TABLE 文の表示
SHOW CREATE TABLE テーブル名;
テーブル名の表示
SHOW TABLES;
SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'データベース名';
テーブル列の表示
SHOW COLUMNS テーブル名;
SHOW COLUMNS FROM テーブル名 LIKE '%絞り込みたい列名%';
DESC テーブル名;
DESC テーブル名 '%絞り込みたい列名%';