■ 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 からだと 文字化けする