UPDATE文でデータを一括で変更する際に、
「文字列の一部を置換したい」ということがあると思います。
REPLACE関数を使えば簡単です。
1 |
UPDATE table1 SET column1 = REPLACE(column1, '置換前', '置換後'); |
在宅プログラマーの備忘録として2005年に始めたブログです。
UPDATE文でデータを一括で変更する際に、
「文字列の一部を置換したい」ということがあると思います。
REPLACE関数を使えば簡単です。
1 |
UPDATE table1 SET column1 = REPLACE(column1, '置換前', '置換後'); |
MySQLでテーブルの種類がInnoDBの場合、データを削除しても容量は変化しません。
容量を更新するには、削除した後、alter tableを実行します。
1 |
alter table t engine=InnoDB; |
MySQLには自動で採番するAUTO_INCREMENTという設定があります。
基本的にはこれを使えば自動的にユニークな番号を採番してくれるのですが、
データを頻繁に削除したり、テーブルをコピーしたりしていると
AUTO_INCREMENTの値が重複したり、過去に削除したデータと同じ値になってしまったりと
いろいろと怖いリスクがあります。
そのリスクを避けるため、私はINSERT文を実行する関数の中で自前で採番するようにしています。
1 2 |
/* TABLE1.ROW_NO が採番用カラムとする */ select ifnull(max(ROW_NO), 0) + 1 as max_row_no from TABLE1. |
カラムがvarchar型だけど数値としてソートしたい場合です。
1 2 |
order by id |
のようにそのまま指定すると
1 2 3 4 5 6 |
1 10 100 2 20 3 |
という感じで文字列としてソートされてしまいます。
数値としてソートしたいときはLPAD関数でゼロ埋めをします。
1 2 |
order by lpad(id, 20, '0') |
20ケタにしたのはあくまで例ですが、
ゼロ埋めをすることで数値の大きい順、小さい順にソートできます。
1 2 3 4 5 6 |
1 2 3 10 20 100 |
基本は
1 |
/etc/my.cnf |
に書き込んで再起動ですが、
再起動なしでSQLで直接設定したいときは
例)wait_timeoutを30に設定
1 |
mysql> set global wait_timeout=30; |