●2019年6月6日(木)
MySQL8.0でSQLパズルの問題を解くの執筆でのメモ書き
-- ■■■ 21. 飛行機と飛行士 ■■■
マルチバイトのInsertで一意制約違反は、
DBのデフォルトの文字コードを変更すれば防げる
詳しい理由は、興味を持ったら調べる。
ALTER DATABASE test default character set utf8;
-- ■■■ 56. ホテルの部屋番号 ■■■
MySQLでは、OracleのRowIDのようなものはない
MySQLでは、Update文のCurrent Ofは使用不可
https://dev.mysql.com/doc/refman/5.6/ja/cursor-restrictions.html
UPDATE WHERE CURRENT OF および DELETE WHERE CURRENT OF は、
更新可能なカーソルがサポートされていないため実装されません。
なので、alter tableで主キーでも付けないと無理
-- ■■■ 56. ホテルの部屋番号 ■■■
Guilhem BichotさんのUpdViewと結合させるサンプル
alter table Hotel add column ColPK int auto_increment primary key;
の後で、Window関数を使ったUpdViewもどきと結合してUpdateする。
alter table Hotel drop column ColPK;
で、追加した列は消しておく。
-- ■■■ 数独を解くのに使う文字列関数 ■■■
select
InStr(Val,'a') as tes1,
InStr(Val,'X') as tes2,
SubStr(Val,1,2) as tes3,
SubStr(Val,3,2) as tes4,
Insert(Val,2,3,'XYZ') as tes5
from (select 'abcdef' as Val) tmp;
出力結果
+------+------+------+------+--------+
| tes1 | tes2 | tes3 | tes4 | tes5 |
+------+------+------+------+--------+
| 1 | 0 | ab | cd | aXYZef |
+------+------+------+------+--------+
------------------------------ MySQLメモ ------------------------------