ある特定のユーザーでログインできたものの、どうやってデータベースを選択するのかなーっと悩んで調べることに。
mysql> USE menagerie
via:3.3.1. データベースの作成および選択
Database changed
なんて単純なんだ!!
Tweet
常にテンパってます。
ある特定のユーザーでログインできたものの、どうやってデータベースを選択するのかなーっと悩んで調べることに。
mysql> USE menagerie
via:3.3.1. データベースの作成および選択
Database changed
前回、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)について
質問・・・
質問に対する回答
update文のhost部分は必要に応じてはずしてください
flush文を省略する場合は、mysqlを再起動してください。
flush privileges;
via:質問:ERROR 1045 (28000)について
いよいよ、接続という時に、またしてもエラー。
エラーメッセージを読んでみると、パスワードを求められたから接続できなかったみたいです。
dbi-connectプロシージャーからパラメータを持っていきdbに接続するのですが、そのパラメータで、パスワードをサポートしてないんですねー。
サポートしているパラメータに関してはこちらを参照
で、パスワードを変更して無事に接続することができました。
一件落着。
あるデータベースに所属しているテーブル一覧を見たかったので、調べてみることに。
mysql> SHOW TABLES;
via:テーブル一覧を表示する
データベースの一覧を表示したいと思って調べました。
データベース一覧表示 (1)
via:データベース一覧を表示する
$ mysqlshow
データベース一覧表示 (2)
mysql> SHOW DATABASES;
oracleの場合、sequenceを作らないとcreate table時に、オートインクリメントをつけることができなかったような気がするのですが、mysqlの場合、AUTO_INCREMENTという単語を付け加えることで、自動的にオートインクリメントがかかるみたいです。
create table table_name
via:オートインクリメントの設定
(column_name1 column_type AUTO_INCREMENT);
select文を使って、しばしば、話題になるのは、どこからどこまで表示するか?という点。
mysqlの場合、offset句というのがあって、「どこからどこまで表示するか?」というのを指定できるみたいです。
SELECT * FROM table LIMIT 5;
via:6.4.1. SELECT 構文
SELECT * FROM table LIMIT 5,10;
via:6.4.1. SELECT 構文
oracleのnvl相当に対応するmysqlの関数を探していたら、やっとみつかった。
expr1 が NULL でない場合は expr1 を返し、それ以外の場合は expr2 を返す。
via:IFNULL(expr1,expr2)
IFNULL() は、使用されているコンテキストに応じて、数値または文字列を返す。
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)
mysqlのsql文のコメントってどうするんだろーと調べていたら回答が見つかりました。
mysql> SELECT 1+1; # このコメントは行末まで続く
via:6.1.6. コメント構文
mysql> SELECT 1+1; -- このコメントは行末まで続く
mysql> SELECT 1 /* これは行中コメント */ + 1;
mysql> SELECT 1+
/*
これは
複数行コメント
*/
1;
今、マッシュアップコンテストに備えて猛烈な勢いでアプリを開発中!!
しかも、今回、現場で使っているoracleではなく、mysqlなので、全然慣れずに悪戦苦闘しています。
hetemlでDBのブラウザーを用意してくれているので、それを使ってデータをselectしているのですが、その際に、sql文も一緒にでてくるのですが、select文で
select ・・・・ limit・・・ |
LIMIT 節を使用すると、SELECT ステートメントで返されるレコード数を制限することができる。LIMIT は 1 つまたは 2 つの数値引数を取る。これらの引数は整数定数でなければならない。
via:6.4.1. SELECT 構文
引数が 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 と指定するのと同じである。
oracleで、文字列結合を表現するとき、
'hoge'||'foo' |
・文字列結合は concat() を使用する。via:MySQL 編14 - 文字関数、連結、空白削除、置換、切出、検索、長さ、数値
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 |
+---------------------+
・CONCAT(str1,str2,...)
via:・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'