mysql・DB

MySQL のJOIN に関するメモ

内容 FROM 句のテーブルの順番と、MySQL がテーブルをJOIN する順番は別 STRAIGHT_JOIN と eq_ref, ref eq_ref になるようにするために JOIN 条件の書き方 STRAIGHT_JOIN をいつ使うか 今回の検証に用いたMySQL は4.0.26。また、例として、以下のテーブルを…

大きめのテーブルにカラムやインデックスを追加する際の注意

先日大きめ(といっても500万行くらい)のテーブルにインデックス付きのカラムを追加しようとして痛い目にあったので調査。 大きめのテーブルにカラムやインデックスを追加するとどうなるか 今回は単純に、「ALTER TABLE 〜 」で追加しようとしました。追加す…

Macports のmysql の文字化け問題、readline 問題を直す

macports のmysql4 やmysql5 を普通にインストールすると、mysql クライアントから日本語を正しく入力できません。例えば、以下のようなクエリを入力すると、Return を押した時に日本語が見事に化けます。 SELECT name AS 名前 from users; さらに困ったこと…

データベースにインデックスを作成する際のメモ

主に、既存のテーブルに貼る際に気をつけるポイント。 MySQL 構文 CREATE INDEX index_name ON table_name(column_name[, column_name2, column_name3]) ALTER TABLE table name ADD INDEX [index_name] column_name[, column_name2, column_name3] カラムの…

MySQLの再起動

Linux 系だと。 /etc/rc.d/init.d/mysql restart Windows(MySQL をサービスとして実行している場合。ほとんどこっちだと思う)だと。 NET STOP mysql NET START mysql 参考 MySQL の安全な再起動とコネクションに関して - 教えて!goo MySQL :: MySQL 4.1 リ…

MySQLが再起動できなくなった

MySQLを停止して、起動しようとしたらエラーした 停止 /etc/rc.d/init.d/mysql stop した後に 起動 /etc/rc.d/init.d/mysql start ここで失敗。何故か起動できない(泣) 試す まずは、mysqlとか打ってみる。当然起動しないで、以下のようにエラーする。 Can…

インデックスを使った高速化について(ORDERD BYにインデクスが使われない例)

今回は、MySQLの高速化のメモ - @luke_silvia.diaryの方法に従ってクエリの高速化をした際に、MySQLのインデックスについて分かったことを書いておきます。 高速化対象のクエリ 今回高速化したいクエリは、以下のようなもの。 SELECT users.*, students.scho…

MySQLの高速化のメモ

最近Railsアプリを作成している中で、初めて高速化をやったので、その際のことをメモしておく。 高速化の手順 ベンチマークをとる まずはベンチマークをとっておく。これによって、どのくらい早くなったか見極める。Railsなら、script/performance/benchmark…

デリミタで分けられた文字を検索

これは何か カラムの中身が次の様になっているとする。 planetカラム。0つ以上の惑星の名前を含む。 planetカラム 水星,金星,地球,海王星,木星 火星,土星,金星,天王星 地球,水星,火星 つまり、CSVのように、「,」を区切り文字として単語を列挙している。MySQ…

昇順ソートでNULLを後ろにもってくる方法

MySQLの昇順ソートの問題 それは、昇順でソートすると、基準カラムがNULLの場合、それが先頭に来ることだ。実装としては正しいかもしれないが、NULLが最後に来てほしい場合もある。 しかし、MySQLには(少なくとも4.1系には)それを指定するオプションがない。…

選択カラムでの並び替え

何がしたいのか 例えば、usersテーブルがあり、それはアカウント情報だけを保持しているとする。そして、それを参照するテーブル、students、teachersがあるとする。それぞれ、生徒にしかない情報、先生にしかない情報を持っている。 この時、User一覧を取得…

複数テーブルの結合(join)

left joinを使う例。 この例は、Userテーブルのkindという値によって関連付けられるテーブルが 異なる。このテーブルに関してkindによって関連付けられるテーブルを引く 場合は、外部結合を使う。 内部だと、kindによる結合先のすべてを1レコードが含むよう…

文字コード設定

■これをすると、utf8を扱う際にdefault character setを指定する必要がなくなったり、 Railsのdatabase.ymlで文字コード設定をする必要がなくなる http://wota.jp/ac/?date=20061011

カラムの衝突を避ける(ambigousエラー)

mysql> select id,family_name,held_date_time from students inner join interviews on interview_id = interviews.id; ERROR 1052 (23000): Column 'id' in field list is ambiguous ↑ idはどちらにも含まれるカラムのため特定不能 mysql> select students…

inner join,left outer joinの違い

■inner join => 対象項目がNULLの場合は含まない mysql> select family_name,held_date_time from students inner join interviews on interviews.id = students.interview_id; +-------------+---------------------+ | family_name | held_date_time | +--…

Duplicateエラー

Mysql::Error: #23000Duplicate entry '25-6' for key 1: INSERT INTO interviewers_interviews (`interview_id`, `interviewer_id`) VALUES (25, 6) テーブル内に、同じレコードあり!特に多:多テーブルに注意

削除不能制約

■外部キーとしてつながっているものがなければ、親のレコードを削除できるまた、登録されていても、 編集は可能

基本4コマンド CRUD

■CRUD 【create】 ※[]は不要ですよ〜自分が入力するところなので目立ってます ▼database create database [databasename] default character set utf 8; grant all on databasename.* to '[user]'@'[localhost]' identified by [password]; ▼table creat…

新しいユーザーの登録

【1.まずはrootでログイン】 >mysql -u root -p >******* 【2.ユーザー登録】 grant all on *.* to 'nagai'@'localhost' identified by 'nagaipass' ※to ユーザー名、by パスワードと書く。DBを作ったら、DB毎に権限を与えておこう。 grant all on […