ラベル mysql の投稿を表示しています。 すべての投稿を表示
ラベル mysql の投稿を表示しています。 すべての投稿を表示

2010/09/29

[mysql]databaseを選択する

ある特定のユーザーでログインできたものの、どうやってデータベースを選択するのかなーっと悩んで調べることに。

mysql> USE menagerie
Database changed

via:3.3.1. データベースの作成および選択

なんて単純なんだ!!

2009/06/11

[mysql]flush構文

前回、mysqlでパスワードを変更するには、flush文をつかないといけないらしいと書いたのですが、今日はちょっとそのflush文について。

リファレンスを読むとやはり権限関連は内部でキャッシュしているみたいです。

MySQL が使用している内部キャッシュを消去するには、FLUSH コマンドを使用します。

via:FLUSH 構文

というわけで、オプションを見てみると、「PRIVILEGES」という項目があって、それを実行すると権限の再読み込みが始まるみたいです。

これに相当するoracleのコマンドってどうするんだろー。

コマンドではなくDB再起動か!!

2009/06/10

[mysql]ユーザーのパスワードを変更

前回、gaucheからsqlを発行するのに、mysqlのドライバを使ったことを書きました。

で、接続をする際に、パスワードが使えないので、ログインユーザーのパスワードをnullに変更する必要がでてきちゃいました。

そこで今回、パスワードを変更する方法を調べました。
(というか、mysqlって、ユーザーのパスワードの有無を調節することができるんですね。
oracleってできたかなーと思いつつ、google先生で調べることに。)

質問・・・

質問に対する回答

そしてuserテーブルが有りますので、rootパスワードを更新してください。
update user set password=PASSWORD('NEW_PASSWORD') where user='root' and host='localhost';
flush privileges;


via:質問:ERROR 1045 (28000)について

なるほど、userテーブルにあるパスワードを変更すればいいんですね。

でも待てよ!!

どのデータベースにいるんだ、このテーブル??

と悩んでしまったので、とりあえず、rootでmysqlに接続し、前回調べたデータベース一覧の取得方法を使って、表示してみました。

で、3件くらい表示されたので、とりあえず、あやしいなーっと思った、「mysql」データベースに再度接続してみました。

接続後、テーブル情報を取得したら、なんとあるじゃないのー

「user」テーブルが!!

無事に見つかったので、パスワードをnullでupdateをかけて、gaucheから再度、mysqlに接続しようとしたら、またしてもエラー。

しかも、エラー内容が同じで、すでにパスワードも変更しているし、commitもかけてある。
(ちなみに、auto commitだったらしく、実行しても直接的な意味はなかったのですが。。。)

なんでかなーと思いつつ、先ほどの引用先をもうちょい進んでみると、

質問・・・

質問に対する回答

update文のhost部分は必要に応じてはずしてください
flush文を省略する場合は、mysqlを再起動してください。
flush privileges;


via:質問:ERROR 1045 (28000)について

「flush文??なにそれ??初めて聞いたぞ!!」(flush文については後述予定。)
と見事にflush文を発行していなかったので、一度、mysqlを再起動をかけてみたら、パスワード変更後の値(null)が無事に反映されて、gaucheからmysqlの接続ができました。

ここで重要なのは、ただupdate文を発行しただけじゃー意味がないということ。

flush文か再起動をかけないと反映されないのがポイントだね。
(しかし、なんでこういう仕様なのだろうか??パスワードがmysqlのサーバーにキャッシュされているということなのだろうが。。。うーん、難しい。)

2009/06/08

[mysql][gauche]gaucheからmysqlに接続

いよいよ、接続という時に、またしてもエラー。

エラーメッセージを読んでみると、パスワードを求められたから接続できなかったみたいです。

dbi-connectプロシージャーからパラメータを持っていきdbに接続するのですが、そのパラメータで、パスワードをサポートしてないんですねー。

サポートしているパラメータに関してはこちらを参照

で、パスワードを変更して無事に接続することができました。

一件落着。

2009/06/05

[mysql]テーブル一覧の取得方法

あるデータベースに所属しているテーブル一覧を見たかったので、調べてみることに。

mysql> SHOW TABLES;

via:テーブル一覧を表示する

なんて楽なコマンドなんだ。

で、どうしてこれが必要になったのかは、ログインユーザーのパスワードが変更したくなったらか、変更方法については、次回、書きたいと思います。

[mysql]データベース一覧の取得

データベースの一覧を表示したいと思って調べました。

データベース一覧表示 (1)
$ mysqlshow

データベース一覧表示 (2)
mysql> SHOW DATABASES;

via:データベース一覧を表示する

他にも、(3)があったのですが、今回は、使いませんでした。

(1)と(2)で表示されるデータベースが若干、違うのだが。。。
(厳密にいうと、(1)の方が今回、少なく表示された。)

ここらは推論ですが、権限関連で表示できないようにしているのではないのかと。

しかし、MySQLクイック・リファレンスが激しくイカしている。

[mysql][mac]インストール完了

mac os x 10.5にmysqlのインストールを行い、やっとこさ、ターミナルから実行できました。

ものすごくこちらのサイトが参考になりました。

感謝感激と共に、まだまだ勉強不足だなーっと痛感しました。

はぁ〜〜

2009/04/10

[mysql]AUTO_INCREMENT

oracleの場合、sequenceを作らないとcreate table時に、オートインクリメントをつけることができなかったような気がするのですが、mysqlの場合、AUTO_INCREMENTという単語を付け加えることで、自動的にオートインクリメントがかかるみたいです。

create table table_name
(column_name1 column_type AUTO_INCREMENT);

via:オートインクリメントの設定

これはこれで便利だなー。

この点は、sqliteも同じですね。

ただ当たり前なのかもしれませんが、AUTO_INCREMENTをつける時の型はint型などの数値系の型でないといけないみたいです。

2008/11/29

[mysql]offset句

select文を使って、しばしば、話題になるのは、どこからどこまで表示するか?という点。

mysqlの場合、offset句というのがあって、「どこからどこまで表示するか?」というのを指定できるみたいです。

SELECT * FROM table LIMIT 5;

via:6.4.1. SELECT 構文

上の場合、最初から5行を取得する構文。

SELECT * FROM table LIMIT 5,10;

via:6.4.1. SELECT 構文

次は、6行目から10行取得しますよぉーという意味。

で、肝心なのは、最初の行を0としているところかな。
いざ、取得する時に気をつけたい点です。

2008/11/21

[mysql]oracle's nvl() is IFNULL

oracleのnvl相当に対応するmysqlの関数を探していたら、やっとみつかった。

expr1 が NULL でない場合は expr1 を返し、それ以外の場合は expr2 を返す。
IFNULL() は、使用されているコンテキストに応じて、数値または文字列を返す。

via:IFNULL(expr1,expr2)

というわけで、例をみてみる。

SELECT IFNULL(1,0);
-> 1
SELECT IFNULL(NULL,10);
-> 10
SELECT IFNULL(1/0,10);
-> 10
SELECT IFNULL(1/0,'yes');
-> 'yes'
via:IFNULL(expr1,expr2)


やっとこれで、null回避処理ができる。

2008/11/01

[mysql]コメントに関して

mysqlのsql文のコメントってどうするんだろーと調べていたら回答が見つかりました。

mysql> SELECT 1+1; # このコメントは行末まで続く
mysql> SELECT 1+1; -- このコメントは行末まで続く
mysql> SELECT 1 /* これは行中コメント */ + 1;
mysql> SELECT 1+
/*
これは
複数行コメント
*/
1;

via:6.1.6. コメント構文

このへんはoracleと変わらないんだなー。

2008/09/08

[mysql] limit like oracle 's rownum

今、マッシュアップコンテストに備えて猛烈な勢いでアプリを開発中!!
しかも、今回、現場で使っているoracleではなく、mysqlなので、全然慣れずに悪戦苦闘しています。

hetemlでDBのブラウザーを用意してくれているので、それを使ってデータをselectしているのですが、その際に、sql文も一緒にでてくるのですが、select文で


select ・・・・ limit・・・


ん??

limit

limitって何ぞや??
と思ったので、リファレンスで調べることに。

おそらくoracleでいうところの、rownumにあたるのではないのかなーと思ったら、案の定ビンゴ!!

でも、正確にいうと同じではないので、≒ぐらいかなと。

LIMIT 節を使用すると、SELECT ステートメントで返されるレコード数を制限することができる。LIMIT は 1 つまたは 2 つの数値引数を取る。これらの引数は整数定数でなければならない。

引数が 1 つの場合、その値は、戻り値として返す、結果セットの冒頭からのレコード数を表す。 引数が 2 つの場合、最初の引数は戻り値として返す最初のレコードまでのオフセットを表し、2 つ目の引数は戻り値として返す最大レコード数を表す。最初のレコードのオフセット値は 0(1 ではない)。

PostgreSQL との互換性を確保するため、MySQL では LIMIT row_count OFFSET offset 構文もサポートしている。

mysql> SELECT * FROM table LIMIT 5,10; # Retrieve rows 6-15
特定のオフセット位置から結果セットの終わりまでのすべてのレコードを取り出すには、2 つ目のパラメータに大きな数値を指定できる。

mysql> SELECT * FROM table LIMIT 95,18446744073709551615; # Retrieve rows 96-last.
引数が 1 つの場合、その値は戻り値として返す最大レコード数を表す。

mysql> SELECT * FROM table LIMIT 5; # Retrieve first 5 rows
つまり、LIMIT n は LIMIT 0,n と指定するのと同じである。

via:6.4.1. SELECT 構文

2008/09/03

[mysql]文字列結合

oracleで、文字列結合を表現するとき、

'hoge'||'foo'

と書くのですが、my sqlで文字列結合できないかなぁーと思って調べたらあった!!

・文字列結合は concat() を使用する。

select concat(123456, 789012);

+------------------------+
| concat(123456, 789012) |
+------------------------+
| 123456789012 |
+------------------------+

select concat('123456', 789012);

+--------------------------+
| concat('123456', 789012) |
+--------------------------+
| 123456789012 |
+--------------------------+

select concat('123456', '789012');

+----------------------------+
| concat('123456', '789012') |
+----------------------------+
| 123456789012 |
+----------------------------+

select concat(key1, data1) from testm;

+---------------------+
| concat(key1, data1) |
+---------------------+
| a0011 |
| a0111 |
| b00210 |
| c003100 |
+---------------------+
via:MySQL 編14 - 文字関数、連結、空白削除、置換、切出、検索、長さ、数値

というわけで、基本、concat(カラム名,カラム名)で結合してくれるみたいです。
カラム名が3つ以上になった場合、どうするんだろう??

===2008.09.05追記===
MySQLのリファレンスにないかなーと思って少し調べたら発見!!
6.3.2. 文字列関数

・CONCAT(str1,str2,...)
引数を連結した結果の文字列を返す。いずれかの引数が NULL のときは NULL を返す。3 つ以上の引数の指定が可能。 数値型の引数は同等の文字列形式に変換される。

mysql> SELECT CONCAT('My', 'S', 'QL');
-> 'MySQL'
mysql> SELECT CONCAT('My', NULL, 'QL');
-> NULL
mysql> SELECT CONCAT(14.3);
-> '14.3'

via:・CONCAT(str1,str2,...)