Tutorial




copy

mysqlで、テーブルをコピーするには mysqlで、テーブルをそっくりそのままコピーするには、今まで、下記のようなかたちでコピーしていました。 CREATE TABLE NewTable AS SELECT * FROM OldTable use test; CREATE TABLE movie AS SELECT * FROM art; これだと、主キーやインデックスなどはコピーしてくれません。 そこで、ちょっと調べました。 ちゃんとテーブル構造すべてをコピーしてくれるコマンドがあるんですね。
CREATE TABLE newtable LIKE oldtable CREATE TABLE test.cook LIKE test.home;
echo "CREATE TABLE test.music LIKE test.movie" CREATE TABLE test.home LIKE test.movie とりあえず. insert してみる. -> 初動をクリアすること. 1. INSERT INTO new SELECT * FROM old TRUNCATE TABLE TableName;


ファイル 読み込み

SYNTAX LOAD DATA INFILE file INTO TABLE tbl DESC ファイルから読み込むには LOAD DATA ステートメントを使う csv ファイルを読み込みもできる
-- CREATE TABLE の順番でならべる -- デフォルトは tab 区切り name age foo 10 bar 11
LOAD DATA INFILE test.txt INTO TABLE tbl
-- 値がない場合は NULL を意味する \n を指定する \n 10 bar 11



CSV 出力

DESC テーブル情報を CSV などのファイルに出力する。 ファイルはSQLサーバー側に出力される。 WARNING 既存のファイルの指定できない ( 理由は /etc/passwd などのデータベーステーブルやファイルが破壊されないようにするため )
-- --- ERROR 1086 (HY000) at line 15: File 'd:/foo.txt' already exists
SELECT * INTO OUTFILE "/home/user/dump.txt" -- 区切りは [,] FIELDS TERMINATED BY ',' -- quot は ["] OPTIONALLY ENCLOSED BY '"' -- 行区切り LINES TERMINATED BY "\n" FROM tbl;
// 拡張子によって 区切り文字が変わる mysql> SELECT * INTO OUTFILE 'c:/test.txt' FROM tbl; // Client に出力する mysqldump --tab や mysql -e "SELECT ..." > outfile などのクライアントプログラムを使用する
WARNING mysqld が実行するので, root として実行するべきではない


文字列 比較

DESC 文字列の比較は比較演算子でする。 このとき 文字コード順に比較される。
-- 名前が E より後 ( F 以降 )のレコードを返す select * from member name > "E"



文字列 Quote

TIP "" の中でも \ が必要な文字がある Quote できないと ["] を ["] の中で指定できないから
// Check するには 次のようにする select "str";
// [\] select "\\"; // ["] select "\""; // ['] // " の中の ' は quot は不要 select "'"; // ["] select '"' // [\] select '\\' // ["] select '\"' insert into tbl (name,age,str) values('\"aaa',32,'bbb') // [\"aaa] select '\\"aaa'; // [\\"aaa] select '\\\\"aaa'; // ["aaa] select '\"aaa'; // 2つ重ねることでエスケープする // RET " select """" // RET ' select ''''



Command

DESC GUI Tool を使う人も 4 コマンドは最低限おぼえておくと便利
// 追加 insert into tbl (col1, col2...) values(val1, val2...) // クエリ select col from tbl where cnd /// 更新 update from tbl where cnd // 削除 delete from tbl where cnd



CommandlineTool.から操作する

DESC GUI Tool もあるが CommandlineTool からも利用できる 他のプログラムから、DB の情報を得るときに便利
// ユーザー XXX が パスワード YYY でログイン shell> mysql -u XXX -pYYY shell> mysql --user=XXX --password=YYY // bye mysql> bye // DB を選択 ( Table ではない ) use test; // table を Listup show tables; // Help ? // Column を追加 ALTER TABLE Customer ADD age int(3); // 終了 quit;
// STDIN から SQL 文を入力 echo use test;select * from tbl where path="aaa" | mysql -u XXX -pXXX
// script を指定して batch 処理 mysql -u XXX -pXXX < /dust/script.sql
WARNING command の最後に [;] を忘れないこと


backup

DESC バックアップをするには mysqldump.exe を使う。 このコマンドは DB を再作成するための sql 文を出力する
-- xxx DB を backup.sql という名前のファイルでバックアップをとる mysqldump.exe xxx > backup.sql -u XXX -pYYY
バックアップを復元するには, バッチモードで実行するだけ
mysql> hogedb < backup.sql -u XXX -pXXX



実行結果をファイルに出力

-- d:/sql.txt にログを出力 mysql> tee d:/sql.txt -- 出力を停止 mysql> notee d:/sql.txt



文字.Code




現在のCodeを調べる

DESC mysql> status
// RET Connection id: 33 SSL: Not in use Using delimiter: ; Server version: 5.1.41-community MySQL Community Server (GPL) Protocol version: 10 Connection: localhost via TCP/IP Client characterset: utf8 Server characterset: utf8 TCP port: 3306 Uptime: 2 hours 28 min 37 sec



変更する

でも telnet からだと 文字化けする