最新ページ

mysql - XINUJP - ChangeWebLog

最終更新時間: 2023-01-16 17:42

2017-11-26 Sun

macOS High Sierra 化でトラブル [mac][mysql]

macOS を High Sierra にアップデートしたところ、トラブルぽつぽつ。

中でも困ったのが、MySQL Workbench が動作しなくなったこと。

で、検索したところ次のサイトを発見。

MySQL WorkbenchがmacOS High Sierraで使えなかったのでSQLPro for MySQLを購入したけど、実は過去バージョンで動作することが判明した件

http://tech-tokyobay.manju.tokyo/archives/668

ううむ、6.0.9 にダウングレードか、と思ったが、その前にアップグレードしてみたところ、うまく動作した。

6.3.9 => 6.3.10

2016-11-02 Wed

my.cnf の default [mysql]

自分が設定した客先運用中の MariaDB(MySQL) で binlog が吐かれていないことが判明!

って、いつも default の my.cnf で、binlog 取れていたのになぜ??

で、自社の各サーバで調べたところ、どうも

FreeBSD/MariaDB default my.cnf は binlog 設定済
CentOS7/MariaDB default my.cnf は binlog 未設定

らしい。

binlog 未設定な default あるとは知らなかった...

ちなみに、log-error は CentOS7 では default 設定

FreeBSD/MariaDB default my.cnf は log-error 未設定
CentOS7/MariaDB default my.cnf は log-error 設定済


なんだかなぁ。

2016-10-05 Wed

MySQL で FULL OUTER JOIN (の代わり) [mysql]

MySQL って FULL OUTER JOIN 無いんだ(なぜだろう)。

その代用方法

RIGHT JOINとLEFT JOINをUNIONする

SELECT * FROM test1
LEFT JOIN test2 ON test1.id=test2.id
UNION
SELECT * FROM test1
RIGHT JOIN test2 ON test1.id=test2.id


ここから抜粋: https://mistymagich.wordpress.com/2011/01/06/mysql%E3%81%A7%E3%81%AE%E5%AE%8C%E5%85%A8%E5%A4%96%E9%83%A8%E7%B5%90%E5%90%88/

面倒くさい、FULL OUTER JOIN 欲しい!

あればこんな感じか。

SELECT * FROM test1
FULL OUTER JOIN test2 ON test1.id=test2.id

2016-08-10 Wed

MySQL transaction テーブルロックと行ロック [mysql]

http://blog.katty.in/3082 より。

インデックスカラムでの条件指定は行ロック
インデックスなしカラムでの条件指定はテーブルロック


へー、なるほど。

2016-04-13 Wed

2015-01-16 Fri

MySQL で差分バックアップ [mysql]

起動時のオプションに--log-updateを指定すると、差分(dump)ファイルができるよう。

http://www.atmarkit.co.jp/ait/articles/0107/24/news001_2.html

2014-12-25 Thu

MySQL text には default 設定できず [mysql]

だってさ。知らなんだ...

BLOB and TEXT columns cannot have DEFAULT values.

2014-10-14 Tue

mysqldump でテーブル定義のみ、データのみなど [mysql]

mysqldump ちょっと整理

- フツー(定義とデータのダンプ)

$ mysqldump -u root -p DB_NAME [TABLE_NAME] > file.sql


- テーブル定義のみ: -d オプション

$ mysqldump -u root -p -d DB_NAME [TABLE_NAME] > file.sql


で、「テーブル定義のみ」で、AUTO_INCREMENT=X がついちゃって困る時は、sed で対処するそうな。

- テーブル定義のみで、AUTO_INCREMENT=X 削除: -d オプション + sed

$ mysqldump -u root -p -d DB_NAME [TABLE_NAME] | sed -e 's/ AUTO_INCREMENT=[0-9]*//' > file.sql


- データのみ: -t オプション

$ mysqldump -u root -p -t DB_NAME [TABLE_NAME] > file.sql


- 条件付きダンプ(しらんかった) -w (where)オプション

$ mysqldump -u root -p -w="id >= 100 AND flag = 1" DB_NAME TABLE_NAME > file.sql


その他、 http://www.risewill.co.jp/blog/archives/1111 が詳しい。

2013-12-03 Tue

MySQL と PHP の曜日インデックスがややこしそう [mysql][php]

何か統一した方が良いよなぁ...

曜日MySQL/DAYOFWEEKMySQL/WEEKDAYPHP/wPHP/N
オリジン 日:1 月:0 日:0 月:1
2011
3122
4233
5344
6455
7566
1607

こちら参照
http://tarhashi.hatenablog.com/entry/2012/12/06/003027

2013-10-17 Thu

mysql CASE の ELSE は必須!! [mysql]

mysql SQL で、CASE を使った UPDATE を実行。

UPDATE table1
SET
  ccc =
  CASE
    WHEN aaa = '111'
      THEN '888'
    WHEN aaa = '222'
      THEN '999'
  END
;


と、ccc = 888/999 は、思った通りに設定されたが、それ以外のレコードの ccc には null が設定されてしまった!!

http://dev.mysql.com/doc/refman/5.1/ja/control-flow-functions.html によると

一致する結果値がない場合は、ELSE のあとの結果が戻され、ELSE パートがない場合は、NULL が戻されます。

だそうな...

なので、ELSE を追加した次が正しい記述。

UPDATE table1
SET
  ccc =
  CASE
    WHEN aaa = '111'
      THEN '888'
    WHEN aaa = '222'
      THEN '999'
    ELSE ccc
  END
;


ELSE は必須ですね。

2013-10-01 Tue

mysql workbench select の limit をはずす [mysql]

mysql workbench6 で、"select rows" する時に limit 1000 が default で設定されている。
これをはずす(全て select)する方法。

Edit -> preferences...
SQL Queries タブ
Query Results
□ Limit Rows <-- マークをはずす
[OK]

2013-09-26 Thu

mysql テーブルの別名 [mysql]

テーブルにも別名をつけられるが、別名をつけるとオリジナルのテーブル名は使用できない様子。

これは OK

SELECT a_tbl.col1 FROM original_table_name AS a_tbl ;


これは NG

SELECT original_table_name.col1 FROM original_table_name AS a_tbl ;


別名なければ、もちろん OK

SELECT original_table_name.col1 FROM original_table_name;


ううむ、理屈は分かるが、ある部分だけちょこっと別名使用とはいかないんだなぁ...