1. Home
  2. Archive
  3. MySQLの小技メモ

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`)
)

赤字で示した部分がユニークになる条件を指定している部分です。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

参考:phpspot::mysqldumpでバックアップ&復元

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

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

SELECT * FROM table ORDER BY RAND()

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

select id from entry order by rand() limit1;

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

参考:Hatena::Diary::naoya::MySQL の order by rand()

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

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

CREATE TABLE new_table SELECT * FROM original_table;

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

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

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

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

おまけ。MySQLの文字化けを直す

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

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

トラックバックURL

http://webtech-walker.com/archive/2007/05/17130450.html/trackback

※トラックバックを受け付けてから表示するまでにしばらく時間がかかる場合があります。

コメントフォーム

※HTMLタグは使用できません。