タグ

MySQLに関するryoma123のブックマーク (51)

  • MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary

    MySQL に限らず、SQL のNULL の仕様には何回か「えっ」と驚くことがあったのでメモしておこうと思います。5.1 版の日語マニュアルがなかったものについては、4.1 のマニュアルを参照しました。 そもそもNULL は何を意味するか NULL は未定義または、不明を意味する。「電話番号を持たない」ということを表現する場合は、NULL ではなく、空の文字列を使う。 NULL 値というものを SQL 初心者はよく混乱します。SQL 初心者は、多くの場合、NULL が空文字 "" と同じであると考えてしまいます。これは違います。たとえば、以下のステートメントは完全に別のものです。 mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES (""); どちらのス

    MySQL のNULL ではまったことあれこれ - LukeSilvia’s diary
  • ヤフー社内でやってるMySQLチューニングセミナー大公開

    3. Yahoo! JAPANのRDB環境 • 11g RAC Enterprise Edition • 約200DB • サーバ 200台, Exadata もあるよ • MySQL 5.1 (RR,Mixed) Percona 5.5 (RR,Mixed) Percona 5.6 (RC,RBR,GTID) • 約500DB • サーバ 300台 Oracle Database MySQL Percona

    ヤフー社内でやってるMySQLチューニングセミナー大公開
  • MySQL 5.1→5.6のmy.cnfの差分とか - (ひ)メモ

    MySQL 5.1で使ってたmy.cnfを試しに5.6で動くようにしたときの差分す。網羅的には調べてないんで他にも廃止になったパラメータはあるかもです。あくまで参考までに。 # log-binにパラメータ指定しないと怒られます -log-bin +log-bin = mysqld-bin # old-passwordsはオン、オフだけじゃなくて引数(0, 1, 2)が必須になって、引数の値によって挙動がかわります。 -old-passwords +old-passwords = 1 # これ指定しないと、リモートからのpre-4.1な認証方法で接続できないです +skip-secure-auth # これ指定しないと、pre-4.1な認証方法で接続できないです★下に追記あり +default-authentication-plugin = mysql_old_password # パラメー

    MySQL 5.1→5.6のmy.cnfの差分とか - (ひ)メモ
  • MySQLのEXPLAINを徹底解説!!

    以前、MySQLを高速化する10の方法という投稿で「EXPLAINの見方についてはいずれ解説しようと思う」と書いてしまったので、今日はその公約?を果たそうと思う。 MySQLのチューニングで最も大切なのは、クエリとスキーマの最適化である。スキーマの設計は一度決めてしまうとそのテーブルを利用する全てのクエリに影響してしまうためなかなか変更することは出来ないが、クエリはそのクエリだけを書き直せば良いので変更の敷居は低い。そして遅いクエリをなくすことは、性能を大幅に向上させるための最も有効な手段である。従って、アプリケーションの性能を向上させたいなら、まず最初にクエリのチューニングを検討するべきなのである。 最適化するべきクエリはスロークエリログやクエリアナライザで見付けられるが、ではそのようなクエリが見つかった場合にはどのように最適化すればいいのか?そのためにはまず現在どのようにクエリが実行さ

    MySQLのEXPLAINを徹底解説!!
  • http://www.programming-magic.com/20071004015528/

  • MySQL 5.7の罠があなたを狙っている

    31. レプリケーションスレーブに注意 (FIXED by 5.7.9) REPLICATION SLAVE権限の *他に* SELECT ON performance̲schema.* が必要 mysql> show slave statusG *************************** 1. row *************************** .. Last_IO_Errno: 1142 Last_IO_Error: The slave I/O thread stops becaus e a fatal error is encountered when it try to get the value of SE RVER_ID variable from master. Error: SELECT command denied to use r 'replic

    MySQL 5.7の罠があなたを狙っている
  • https://kennyqi.com/archives/61.html

  • 別のテーブルのデータをテーブルに追加する(INSERT ... SELECT文)

    INSERT INTO tbl_name (col_name1, col_name2, ...) SELECT col1, col2, ... FROM other_table WHERE ... データを取得したい別のテーブルからどのようにデータを取得するのかを SELECT 文で記述し、データを追加するテーブルでどのカラムに値を格納するのかを指定します。 SELECT 文で指定するカラムの数と INSERT 文で指定するカラムの数は一致していなければいけません。 -- -- では実際に試してみます。データを追加する側として次のようなテーブルを作成しました。データをいくつか追加しておきます。 create table sales (id int auto_increment, name varchar(10), count int, index(id)); insert into sal

    別のテーブルのデータをテーブルに追加する(INSERT ... SELECT文)
  • MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店

    前回の記事 MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか の続きです。 master : slave = 1 : 1 で参照を slave に分散してもまったく美味しくないわけですが、では参照の負荷分散を行いたい場合の slave は何台で構成するとよいのか考察してみます。具体的には slave 2台の場合と 3台の場合でどちらがお得か。 台数を増やすということは、どこかに障害が発生する確率が高まる、ということです。1台の slave に障害が発生してダウンした場合のことを考えてみます。 slave * 2 → 残り 1台で処理継続 生き残った1台あたりの処理が 2倍になる slave * 3 → 残り 2台で処理継続 生き残った1台あたりの処理が 1.5倍になる たとえば 1台あたり最大 1000qps の処理能力があるとします。sla

    MySQLで参照の負荷分散を行うslaveは3台から構成するのがよいのでは - 酒日記 はてな支店
  • MySQLをmaster:slave=1:1構成にして参照をslaveに向けるのがなぜ良くないか - 酒日記 はてな支店

    MySQLのmasterとslave 1:1にして参照をslave向けるのってやりたがる人多いみたいだけど、性能たいして上がらない割に可用性落ちるだけだからやめようキャンペーン 2011-06-19 00:16:30 via YoruFukurou MySQL はレプリケーションが簡単に構成できるのですが、時折 master 1台 に対して slave 1台、更新処理は master に、参照は slave に、という構成を目にします。 個人的にはこの構成はお勧めでないと思っているので、その理由を考察してみます。 1. 可用性が落ちる 当然ですが、master, slave のどちらが落ちても影響を受けるために可用性が低下します。 2. 全体の性能がほとんど上がらない master 1台ですべてのクエリを処理する場合と比べて、可用性が落ちる引き換えとして見合った性能向上が得られるか、という

  • 外部結合を行う(LEFT JOIN句, RIGHT JOIN句)

    2 つのテーブルを結合してデータを取得する方法の中で、指定したそれぞれのテーブルのカラムの値が一致するデータだけではなくどちらかのテーブルにだけデータがある場合も合わせて取得する方法が外部結合です。ここでは MySQL で外部結合を行うための LEFT JOIN 句および RIGHT JOIN句 の使い方について解説します。 外部結合とは 外部結合は内部結合と同じく2つのテーブルでそれぞれ結合の対象となるカラムを指定し、それぞれのカラムに同じ値が格納されているデータを結合して取得するものです。内部結合の場合は、一致しないデータは取得しませんでしたが、外部結合の場合は一致しない場合もデータとして取得します。 左側のテーブルにしかないデータも取得する方法を左外部結合、右側のテーブルにしかないデータも取得する方法を右外部結合といいます。 最初に左外部結合です。次の図を見て下さい。左側のテーブルと

    外部結合を行う(LEFT JOIN句, RIGHT JOIN句)
  • 紀子さん@へぼぷろぐらまの日常 | mysql の KEYについてまとめてみるよ PRIMARY KEYの巻(1)

    CREATE TABLE 構文 このあたりを読めばちゃんと書いてあるけどね。 PRIMAY KEY を指定したい場合 ・カラム定義に書く CREATE TABLE keytest01( id int not null PRIMARY KEY ); mysql> desc keytest01; +-------+---------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-------+---------+------+-----+---------+-------+ | id | int(11) | NO | PRI | NULL | | +-------+---------+------+-----+---------+-------+ おそらく一番一般的な書き方です

  • 整数型 - MySQLのデータ型 - MySQLの使い方

    MySQL で利用可能なデータ型の中で整数型(TINYINT, SMALLINT, MEDIUMINT, INT, BIGINT)の使い方について解説します。 TINYINT[(M)] [UNSIGNED] [ZEROFILL] 符号付きの範囲は -128 から 127 。符号なしの範囲は 0 から 255 。 SMALLINT[(M)] [UNSIGNED] [ZEROFILL] 符号付きの範囲は -32768 から 32767 。符号なしの範囲は 0 から 65535 。 MEDIUMINT[(M)] [UNSIGNED] [ZEROFILL] 符号付きの範囲は -8388608 から 8388607 。 符号なしの範囲は 0 から 16777215 。 INT[(M)] [UNSIGNED] [ZEROFILL] 符号付きの範囲は -2147483648 から 2147483647

    整数型 - MySQLのデータ型 - MySQLの使い方
  • 『int(1)とtinyintの違い』

    アイル開発チームの技 ブログ 専門分野 Struts2 Redmine RedhatLinux Java Oracle の裏(?)情報をあげてきます! 結論から言うと、 基的に、DBの数値型で、桁数の最大値を指定する場合、 int(?) ではなく、桁数に合った型(tinyint、smallint等) を使いましょう。 まずは、基Mysqlのint型の入力可能桁数表。 型       バイト  最小値             最大値 TINYINT      1   -128               127 SMALLINT    2   -32768             32767 MEDIUMINT  3   -8388608            8388607 INT         4   -2147483648         2147483647 BIGINT

  • RDBにおけるキャッシュという考え方

    RDBの専門家として日々活動している中で気づいたことのひとつに、「RDBはデータへのアクセスの実装をインデックスに頼っているが、インデックスは全ての問題を解決できるほど万能ではない」ということがある。インデックスというのはとても強力な部品であり、その点には全く異論はない。だが、世の中の全ての問題(クエリ)を解決できるほど、柔軟性に富んだものではないということだ。RDBは、どのインデックスを使ってデータへアクセスするかということを、オプティマイザを用いて判断する。大抵のRDB製品では、オプティマイザはよい仕事をするので、インデックスとオプティマイザの組み合わせによって、ほとんどの問題に対応できる。だが、100%ではないのであり、そのようなケースがシステムの性能問題を引き起こしたり、プログラマ(アプリケーションの設計者)に、NoSQLへ完全に移行したり、クエリ高速化のために非正規化をすると言っ

    RDBにおけるキャッシュという考え方
  • 日付の計算 - SQL(MySQL,ORACLE)

    MySQLORACLEで 日付の足し算、引き算をする例です。 MySQL日付の計算 3日後の日付を取得する 3日後の日付を取得する例です。 使用例 mysql> SELECT date_add(current_date, interval 3 day); +----------------------------------------+ | date_add(current_date, interval 3 day) | +----------------------------------------+ | 2006-11-26 | +----------------------------------------+ 3日前の日付を取得する 3日前の日付を取得する例です。 使用例 mysql> SELECT date_add(current_date, interval -3 day

    日付の計算 - SQL(MySQL,ORACLE)
  • MySQLテーブル設計入門

    2015/04/30 schoo WEB-campus https://schoo.jp/class/2218 Read less

    MySQLテーブル設計入門
  • SHOW VARIABLESにはGLOBALとSESSIONがある - Road To Nowhere

    おそらくMySQL使いの人にとっては常識だと思うけど、ちょいはまったのでメモ。 MySQLの設定値(変数)を見るときに使うSHOW VARIABLESにはSESSIONとGLOBALの2種類がある。 そんでもって、SESSIONもGLOBALも指定しない場合はSESSIONから値をとってくるとのこと。 http://ftp.ku.ac.th/pub/mirror/mysql/doc/refman/5.1/ja/using-system-variables.html さて何にはまったかというと、MySQLのコマンドラインからSET GLOBALで設定値を変更後、 SHOW VARIABLESで設定値を確認すると値が変わってないわけです。 なんじゃろということで、数分あたふたして同僚に泣きつくと「変わってるよ」と。 気を取り直して、MySQLのコマンドラインに入り直してSHOW VARIABL

    SHOW VARIABLESにはGLOBALとSESSIONがある - Road To Nowhere
  • Upgrading passwords from old_passwords to “new passwords”

    You have old_passwords=1 in your my.cnf. I’m guessing this is because you used one of the my-small.cnf, my-large.cnf etc. templates provided with your MySQL distribution. These files can easily win the “most outdated sample configuration file contest”. Usually it’s no big deal: if some parameter isn’t right, you just go and change it. Some variables, though, have a long-lasting effect, and are not

    Upgrading passwords from old_passwords to “new passwords”
  • MySQLのgroup_concatで複数レコードを1行にまとめる - 文系プログラマによるTIPSブログ

    実は非常に有用で、この機能が実は欲しかった!と言う方が続出する機能なのですよね〜 全然知らなかったのですが、mysqlでは複数レコードを1行にまとめる事ができます。 複数行をカンマ区切りにしたり、結構有効に使えそうです。 テーブル・データの準備 テーブル データ 実際に実行してみる 普通にselectしてみる group_concatしてみる group_concat + distinct group_concat + group by テーブル・データの準備 早速サンプルコードを。 テーブル mysql> create table gc1(id int auto_increment, uid int, name varchar(30), primary key(id))engine=innodb charset=utf8mb4; Query OK, 0 rows affected (0.

    MySQLのgroup_concatで複数レコードを1行にまとめる - 文系プログラマによるTIPSブログ