1read 100read
2011年12月1期データベース8: MySQL 総合 Part21 (812) TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
9: だれかみずほ銀行のDBを直してやれよ (28)
10: DB設計を語るスレ 4 (371)
11: システム構築ベンダの実力 (937)
12: Microsoft SQL Server 総合スレ 9 (187)

MySQL 総合 Part21


1 :11/10/18 〜 最終レス :11/12/09
オラクル社によるオープンソースのRDBMS、MySQLの総合スレです。
MySQL 総合 Part20
http://hibari.2ch.net/test/read.cgi/db/1307760689/
MySQL Developer Zone http://dev.mysql.com/
MySQL 5.5 マニュアル (E) http://dev.mysql.com/doc/refman/5.5/en/index.html
MySQL 5.1 マニュアル (J) http://dev.mysql.com/doc/refman/5.1/ja/index.html
日本MySQLユーザ会(MyNA) http://www.mysql.gr.jp/
ML過去ログ http://www.mysql.gr.jp/mysqlml/mysql/
ここで質問をする前に、MyNAでのFAQと心得の条を最初に確認しましょう。
http://www.mysql.gr.jp/frame/modules/bwiki/?FAQ
http://www.mysql.gr.jp/frame/modules/bwiki/index.php?%BB%A8%B3%D8%2F%BF%B4%C6%C0

2 :
FAQ
■トランザクションがまともに働きません。rollbackしてもテーブルに書き込まれてます
 ストレージエンジンがMyISAMじゃありませんか?

3 :


4 :
壱持つ

5 :
お安い御用です。

6 :
おれのスレも頼むわ

7 :
お安い御用です。

8 :
お安くなります。

9 :
お高くつきます。

10 :
お高くとまります。

11 :
いちおつ。

12 :
荷物。

13 :
おっさん

14 :
おっちん

15 :
おてぃん

16 :
ポコ

17 :
おーまん

18 :
こまん

19 :
まんぽ

20 :
ねじり

21 :
おってぃん

22 :
てぃんぽん

23 :
たんぷぉん

24 :
なぷくぃん

25 :
どうしてこうなった

26 :
特に語ることも無いのさ。

27 :
お安い御用です。

28 :
MySQL技術者認定資格試験を受けた人いる?

29 :
そんなもんあるのか…
ポスグレならともかく。

30 :
お安い御用です。

31 :
こまん

32 :
てぃあんく

33 :
てくまく

34 :
まやこん

35 :
らみぱす

36 :
るれらぱ

37 :
ぱらばら

38 :
ぱからっぱ

39 :
MySQL 5.1.54
Viewについて教えて下さい。下のViewを作ってみたんですが、Navicatから見ようとすると、
view_bookはプライマリーキーがありません。
このテーブルをUpdateする時は下記の様に行います:
更新 view_book set 変更するフィールドと値 where 全てのフィールドと現在地 LIMIT 1
というメッセージが出ます。(内容は正常に表示されます)。ViewでPKを作るにはどのようにすればいいのでしょうか?
create
definer=current_user
view view_book
as
select distinct filename as v_filename,
titlename as v_titlename,
a.author_id as v_author_id,
b.author_name as v_author_name
from book_tbl a
inner join author_tbl b
on a.author_id = b.author_id
order by a.id;

40 :
>>39
http://wiki.navicat.com/wiki/index.php/What%27s_this_warning_about_my_table_not_having_a_primary_key%3F
無視していいんじゃないかと思うけど

41 :
>>40
分かりました。ありがとうございます

42 :
ちょっと調べきれなかったんですが
検索条件で where A = md5("32桁") みたいに、md5で検索できると思うんですが、
複数のカラムを足した値とかのmd5で検索は、、、できないですよね?
例えば、カラムA+カラムBの値がmd5のCだとして
where A+B=md5(C)
とかでできたらいいなと。。。
必要ないって言われたらそれまでですがw

43 :
普通に
WHERE CONCAT(A, B) = md5(C)
とかじゃいかんのか。
というかA+Bがmd5(C)ってどうゆーこと?
なんか外しているかもだけど
WHERE md5(CONCAT(A, B)) = C
なほうがわかる・・

44 :
>>43
あ、、、、そっかwwwwww
どもっす!!!!!解決!!!!

45 :
最近mysqlを勉強し始めたのですが、
CREATE TABLE t_pre_member (
id MEDIUMINT NOT NULL AUTO_INCREMENT,
username VARCHAR(50),
password VARCHAR(50),
last_name VARCHAR(50),
first_name VARCHAR(50),
birthday CHAR(8),
ken SMALLINT,
link_pass VARCHAR(50),
reg_date TIMESTAMP(14),
PRIMARY KEY (id)
);
というSQL文をphpadminで実行すると、
#1064 - You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version for the right syntax to use near '(14)
NOT NULL, PRIMARY KEY (id) )' at line 5
というエラー文章が表示され、実行することができません。
TIMESTAMP(14)をTIMESTAMPに変更すると実行することができます。
TIMESTAMP(14)を使用するにはどうしたらいいでしょうか。
使っているmysqlは5.5.10で、VertrigoServで一括インストールを行ったものです。
ご教授お願いします。

46 :
事故解決しました。
TIMESTAMP(N)という表記自体廃止されたんですね。
ありがとうございました。

47 :
登録されている問題をランダムに出したかったので
select * from question where test_id='" . mysql_real_escape_string($test_id) . "'
というのにorder by rand()を加えて
select * from question where test_id='" . mysql_real_escape_string($test_id) . "'order by rand()
としました。
ランダムにはなったのですが、問題が被ることがあります。
一度出題したIDを除外してランダム検索したいと思っているのですが、検索時に除外項目をつけることは可能でしょうか?

48 :
>>47
そのSQLを複数回実行して、1件目を出題しているってこと?
例えば問題を10問出すならそのSQLを1回だけ実行して、
出てきた10件分をどこかに保存しておけばいいと思う。

49 :
ウェブサーバーとDB(Mysql)サーバがあって、
ウェブサーバーからDBへのアクセスを行うと重いんだけども、
何が悪いんだろ
DBサーバの動作(ロードアベレージ)には余裕があるし、
Mysqlへの接続数も余裕だ
ウェブサーバーからDBサーバにアクセスするのに、
何らかの原因で待ちが発生しているような気がするが・・

50 :
ncharは5.1でも使われてるんでしょうか?
ここを見ても、charとvarcharしかありません。
http://dev.mysql.com/doc/refman/5.1/ja/char.html
日本語を含む文字列を使用する場合、
create database test_database default character set utf8; でデータベースを作って、
create table test_table( name char);でテーブルを作ればいいんでしょうか?

51 :
>>49
よくあるのはskip-name-resolve

52 :
>>50
ncharなんて昔からないと思うけど。Oracleと勘違いしてない?
> create database test_database default character set utf8; でデータベースを作って、
> create table test_table( name char);でテーブルを作ればいいんでしょうか?
OK

53 :
>>51
ありがとうございます
アクセス元をhostsに追記したんだけど効果は無く・・
昨日の夜から何もしていないのに突然遅くなったんだよね
なんでだろ・・

54 :
>>52
何か色々ググってた時にごっちゃになってたみたいです。
>>50の方法でいけました。ありがとうございます。

55 :
>>49
Linux系ならDBサーバとWebサーバの両方でsysstat使って状態を調べてみたらいいと思う。
sar -dqurあたりで、ディスクアクセス、プロセス数、cpu使用率、メモリみる。どれも大丈夫だったらネットワーク経路のチェックかな。

56 :
勉強としてtwitterを参考に、
「自分のつぶやきと友達のつぶやきをタイムラインに表示する」
という物を作っているのですが、そのSQLで悩んでいます。
■テーブル構成(テーブル名:フィールド)
user:id、name
friend:id、from_user_id、to_user_id
voice:id、user_id、comment、date
■データ構成
□user
1|山田太郎
2|鈴木花子
□friend
1|1|2
□voice
1|1|山田のつぶやき|2011-10-25 18:55:00
2|2|鈴木のつぶやき|2011-10-25 19:00:00
■考えたSQL
SELECT * FROM voice LEFT JOIN (SELECT user.id,user.name FROM user LEFT JOIN friend ON user.id=friend.from_user_id) AS user_friend ON voice.user_id=user_friend.id
WHERE voice.user_id='1'
「山田太郎」の会員ページにアクセスした時のタイムラインを想定したのですが、
WHEREにこの条件を付けると、つぶやきは「山田太郎」の物しか取れません。
友達関係である「鈴木花子」のつぶやきも一緒に取得するには
どういうSQLを書けばいいのでしょうか?お分かりな方はアドバイスをお願いします。

57 :
>>56
うってつけの資料が
http://yapcasia.org/2011/talk/93

58 :
>>55
ありがとうございます。
ディスクアクセスが異常に多いことがボトルネックであることがわかりました。
入出ともに頻繁です。原因を探っています

59 :
>>57
ありがとうございます。凄く参考になりました。
とりあえず当初の目的である「自分と友達のつぶやきを表示」
は、以下のSQLで出来そうです。INがポイントですね。
SELECT * FROM voice WHERE user_id IN (SELECT to_user_id FROM friend WHERE from_user_id='1') || user_id='1' ORDER BY date DESC
会員のプロフィールも結合したかったのですが、
そうするとかなり重くなりそうなので、
それは出力時に1件ずつ取得しようと思います。

60 :
存在しないデータをdeleteしようとしても、エラーにならないのですが、
エラーにする方法はありますか?

61 :
>>60
当たり前です。削除するに相当するものがなかったのです。エラーではありません。
phpなら
mysql_affected_rows
で影響のあった件数を調べてゼロだったら何とかして下さい。

62 :
>>61
なんか言い方がむかつくけど、ありがとう

63 :
逆切れ乙w

64 :
質問させて頂きます。
売上一覧のテーブルから、
SELECTでその月の売上合計数をSQLでとりたいんですが、
いまいちやりかたが分からず、困惑しています。
テーブルのカラムは | 売上ID | 商品名 | 価格 | 日付 | という感じで、
商品が売れた事にINSERTしています。
(かなり大雑把に書いていますが)
月間売上合計のSQL文はどの様に書いたらいいのでしょうか?
よろしくお願いします。

65 :
「SQL 合計」でググレカスシネバカハゲあほちびでぶ

66 :
>>65
おぉ・・・サーセン&あざっす
正確に言うなら、ググレカスシネバカあほぽっちゃりかな。

67 :
ぽっちゃり系なら許す

68 :
結局 Oracleに買われた時点で

69 :
くだ質かもしれませんがお願いします。
Vine6(OSデフォルト文字コードutf-8)で5.1.56を使用して勉強してます
mysqlプロンプトから「\e」でエディタ(vim)呼び出しが可能ですが
その時にエディタに読み込まれる分に日本語があると文字化けします
例) select * from tbl where name='表示' \e
mysql側の設定はすべてutf-8に設定済みです(statusで確認)
vimで「:set fenc?」して読み込んだときのエンコードを調べると「cp932(シフトJIS)」と出ます
vimで改めて、日本語部分を打ち直して「:set fenc=utf-8」とやってから「:wq」すれば
ちゃんとクエリーも通りますが面倒でたまりません
(日本語部分を触らず「:set fenc=utf-8」もせず、編集を終えても通ります)
どう対応すれば良いでしょうか

70 :
http://d.hatena.ne.jp/hirafoo/20110409/1302283428
limit 100,10がしていることは「110個データをfetchして、先頭から100個捨てる」こと。
・これが正しいのか確認する方法
・ドキュメントのどこに載ってるのか
わかる人いたらお願いします。

71 :
>>70
さすがにこれは間違いだろう

72 :
>>70
まず大事なこととして、fetchは10個しかしない。

73 :
ファイルからデータを入れようとしたら
ERROR 1083(42000) Field separator argument is not what is expected
ってでたんですが、どうしたらいいですか?

74 :
>>70
ソース見るのが確実
コードを読めない私は別のアプローチで確認してみることにする

75 :
前後でSHOW GLOBAL STATUSとって100ぐらい増えている指標値を探せばいいよ

76 :
>>73
まずは、ファイルの内容をここにコピペして、
実行したコマンドを書いてください。

77 :
>>73
ていうか、読んでそのまんまじゃないか。

78 :
巨大なテーブルがありまして、別プロセスで更新処理を掛けると、
もう一つのプロセスの更新処理がタイムアウト?で処理が失敗します。
このタイムアウトを設定するパラメータを教えて頂けませんでしょうか?
どこかで、読んだ記憶があるのですが、久しぶりのMYSQLで忘れてしまいました。
MYSQL5.1+CentOSです。どうぞ、宜しくお願いします。

79 :
タイムアウト パラメータ mysql
ぐぐったほうが早いのに

80 :
http://wikiwiki.jp/hon/?Andromeda
このステータスなどスキルをDB化したいんですが
どうやればいいでしょう?テーブルの作る例を教えてください
PHPで処理させるつもりです 結合させて表示しようとしてるんですが
Hero表
name
Andoromeda
ステータス表
+---------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+----------+------+-----+---------+-------+
| name | char(30) | NO | PRI | | |
| str | float | YES | | NULL | |
| agi | float | YES | | NULL | |
| int | float | YES | | NULL | |
| hp | float | YES | | NULL | |
| mana | float | YES | | NULL | |
| armor | float | YES | | NULL | |
| marmor | float | YES | | NULL | |
| range | float | YES | | NULL | |
| as | float | YES | | NULL | |
| ms | float | YES | | NULL | |
| dmg | char(30) | YES | | NULL | |
| type | char(30) | YES | | NULL | |
| istr | float | YES | | NULL | |
| iagi | float | YES | | NULL | |
| iint | float | YES | | NULL | |
| ihp | float | YES | | NULL | |
| imp | float | YES | | NULL | |
| iarmor | float | YES | | NULL | |
| imarmor | float | YES | | NULL | |
+---------+----------+------+-----+---------+-------+

81 :
skill表
+-----------+----------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| name | char(30) | NO | | | |
| skillname | char(30) | NO | | | |
+-----------+----------+------+-----+---------+-------+
name | skill | level |
Andromeda| Aurora |広範囲にダメージを与える70 | 1
Andromeda| Aurora |広範囲にダメージを与える100| 2
Andromeda| Aurora |広範囲にダメージを与える150| 3
Andromeda| Aurora |広範囲にダメージを与える200| 4
Slither | Poison spray| 毒噴出50ダメージ+10枚秒 | 1
Slither | Poison spray| 毒噴出70ダメージ+20枚秒 | 2
などレベルごとに設定したいです
AUTO_INCREMENTでキャラクターごとにレベルが1からスタートするようにしたいんですが
どうすればいいでしょう
主キーがどう考えても ヒーロー名で重複しないとおもうんですが
教えてください

82 :
Hero表
name|
Andoromeda
Slither

83 :
やっぱり
HeroIDとか使って複合キーにしてAUTO_INCREMENTさせるしかないんですかね教えてください

84 :
月刊DBマガジンバックナンバー完全収録DVD届いた

85 :
>>80-83
そのままじゃだめなの?
てかMySQL関係なくねそれ

86 :
innter joinとleft joinって一般的にどちらが早いとかありますか?

87 :
>>86
統計をとったらinner joinだろう

88 :
代替できない物同士を比較する事に意味はあるのだろうか

89 :
「もし、指定したユーザーが存在しなければ、追加する」
をSQLだけで表現するにはどう書けばいいのでしょうか?

90 :
>>89
ほい
http://dev.mysql.com/doc/refman/5.1/ja/insert-on-duplicate.html

91 :
>>84
うちも来た
記事ごとのpdfなんだね

92 :
ひとつのSQLで、複数のjoinを使う場合って、括弧で囲むものなの?
(a left join b on a.id=b.id) left join c on a.id=c.id
いらないような気がするんだけど、括弧を使う人と使わない人がいて、
どっちが正しいのかわからない。

93 :
俺も知りたい。
ただ、無くても動くようなカッコはとった方が良いと聞いたことがある。

94 :
>>92
自分は繋げる順番や意図を明示したい時につけてる。
極端な話、 1+2*3 を 1+(2*3) って書くような感じ。
短い文だといらないけど、長くなると付けておいた方がわかりやすいと思う。
ただ、つけない方がSQL実行時のコンパイル速度は(体感差はともかくとして)速いんでしょうね。

95 :
mysql5.5にしたんだけど
データベース名に「-」を含んだデータベース作れなくなった?
create database hoge-poge;

ERROR 1064
create database hogepoge;

OK

96 :
5.0でも試したらエラーになった
なんで作れてるんだろう?

97 :
``で囲めば作れた。
でもファイル名の - の部分が @002d になった

98 :
http://www.brandonchecketts.com/archives/mysql-error-invalid-old-table-or-database-name
この人は-を_にしたって言ってる
なんで急に-が使えなくなったんだ

99 :
MySQL 5.1からの仕様変更だよ
http://dev.mysql.com/doc/refman/5.1/ja/identifier-mapping.html

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
・ 次のスレ
9: だれかみずほ銀行のDBを直してやれよ (28)
10: DB設計を語るスレ 4 (371)
11: システム構築ベンダの実力 (937)
12: Microsoft SQL Server 総合スレ 9 (187)