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 11LOAD DATA INFILE test.txt INTO TABLE tbl-- 値がない場合は NULL を意味する \n を指定する \n 10 bar 11CSV 出力
DESC テーブル情報を CSV などのファイルに出力する。 ファイルはSQLサーバー側に出力される。 WARNING 既存のファイルの指定できない ( 理由は /etc/passwd などのデータベーステーブルやファイルが破壊されないようにするため )-- --- ERROR 1086 (HY000) at line 15: File 'd:/foo.txt' already existsSELECT * 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 cndCommandlineTool.から操作する
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.sqlWARNING 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 からだと 文字化けする