Webtech Walker

MySQLの小技メモ

MySQLで忘れがちなコマンドとかメモです。

UNIQUE KEY :: 複数のカラムでユニークになる条件を指定する

CREATE TABLE `test_table` (
  `id` int(10) unsigned NOT NULL auto_increment,
  `name` text NOT NULL default '',
  `email` text NOT NULL default '',
  `tel` text NOT NULL default '',
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name` (`name`,`email`)
)

UNIQUE KEYの部分でユニークになる条件を指定しています。nameとemailが両方重複しているデータが登録できなくなります。

select * from test_table;
+----+------+------------------+--------------+
| id | name | email            | tel          |
+----+------+------------------+--------------+
|  1 | hoka | hoka@example.com | 01-2345-6789 |
+----+------+------------------+--------------+

例えば上記のように入力されていたら、以下のようなSQLはエラーになるわけです。

INSERT INTO test_table (name,email,tel) VALUES("hoka","hoka@example.com","12-3456-7890");

INSERT INTO test_table (name,email,tel) VALUES("hokamura“,”hoka@example.com”,”12-3456-7890″);
INSERT INTO test_table (name,email,tel) VALUES("hoka","hokamura@example.com","12-3456-7890");

mysqldump :: データベースのバックアップを取る

mysqldumpでデータベースのバックアップを取ることが出来ます。詳細は以下の通りです。

すべてのデータベースのバックアップ

$ mysqldump -u root -x --all-databases > dump.sql

特定のデータベースのみのバックアップ

$ mysqldump -u root データベース名 > dump.sql

mysqldumpのすべてのデータベースのバックアップを復元

$ mysql -u root -p < dump.sql

特定データベースのみの復元

$ mysql -u root データベース名 < dump.sql

order by rand() :: ランダムにレコードを取り出す

下記のSQLでランダムにソートしたデータを抽出できます。

SELECT * FROM table ORDER BY RAND();

その中から一つだけ取り出すにはlimitをつければいいだけです。

SELECT id FROM entry ORDER BY rand() LIMIT 1;

ただ、データ量がたくさんあるテーブルだと遅くなるようです。

MySQL の order by rand() - naoyaのはてなダイアリー

CREATE ... SELECT :: 既存のテーブルをデータごと別名でコピーする

テーブルをカラムのデータごとコピーするには下記SQLを実行します。

CREATE TABLE new_table SELECT * FROM original_table;

マニュアルに下記のようあります。

インデックスは新しいテーブルに持ち越されません。また、一部のカラム型の変換が行われる場合があります。たとえば、AUTO_INCREMENT 属性は維持されず、VARCHAR 型のカラムは CHAR 型のカラムになることがあります。

MySQL 4.1 リファレンスマニュアル::6.5.3. CREATE TABLE 構文

インデックスは持ち越されないようです。それはわかりました。データ型変わってしまうこともある、とありますがどんな条件で変わるかはちょっとわかりませんでした。

文字化けを直す

MySQLの文字化けで悩んでる人は結構いると思いますが(僕だけかもしれないがorz)そんなMySQL文字化け問題を解決できそうなページを見つけました。こちらは元記事よりうまく説明できる自信が無いのでリンクだけ貼っておきます。

ヽ( ・∀・)ノくまくまー(2006-10-11)::[MySQL] 文字化け問題を本気で直す

このエントリーをはてなブックマークに追加