問題 こんなテーブル a があります。 create table a (id int, flag int); こんなふうにデータを入れて、 insert into a (id, flag) values (1, 1), (2, 1), (3, 0), (4, 0), (5, 1); こんなふうになっているとします。 select * from a; +----+------+ | id | flag | +----+------+ | 1 | 1 | | 2 | 1 | | 3 | 0 | | 4 | 0 | | 5 | 1 | +----+------+ なるべく単純な1つのSQLで、すべてのレコード数と、flag=1のレコード数と、flag=0のレコード数を取得せよ。 なお、サブクエリは使わないこと。 ヒント 集計を3つしたいので、こうなる? select count(????), c
REPLACE文について unknown REPLACE文は、INSERT文とUPDATE文を合体させたようなものです。 挿入するデータが既にテーブルに存在する場合は、新しくレコードを挿入せず、既存のレコードを新しいデータで上書き(置換)します。(UPDATE文と同じ) 逆に、挿入するデータがテーブルに存在しない場合は、新規レコードを挿入します(INSERT文と同じ)。 またREPLACE文は、INSERT文同様、SELECT文の結果を挿入することが可能です。 INSERT INTO テーブル名(フィールド名) VALUES (値) SELECT 文; REPLACE INTO テーブル名(フィールド名) VALUES (値) SELECT 文; # MySQLログイン、データベース選択 C:\mysql\bin> mysql -u root -p db_User Enter Enter
BLOB型とTEXT型について BLOG 型及び TEXT 型はそれぞれ巨大なバイナリデータとテキストデータを格納する時に利用されます。 BLOB 型はバイナリデータを扱うデータ型で格納できるデータのサイズを指定しません。画像ファイルなどを格納する場合などにも使われます。ただ最大長は決まっており、最大長の種類によって次の 4 つが用意されています。 TINYBLOB 最大長が 255 (2^8 - 1) バイト。 BLOB 最大長が 65,535 (2^16 - 1) バイト。 MEDIUMBLOB 最大長が 16,777,215 (2^24 - 1) バイト。 LONGBLOB 最大長が 4,294,967,295 または 4G バイト (2^32 - 1) バイト。 各 BLOB 型はでは、データはバイナリデータとしてそのまま格納されます。 TEXT 型は文字列データを扱うデータ型で格
レンタルサーバが高い上に、サイトが人気なくてAWSのt.microに移した方がよいと思ったのでdrupalを移行中。 そんで、早速 phpmyadminからsqlファイルでexportしたものをawsにインポートしようとしたら以下のエラーが。 >sudo mysql -u <userid> -p<password> <dbname> < <file>.sql ERROR 2006 (HY000): MySQL server has gone awayいろいろと調べると、一時メモリ不足らしい。 でmy.cnf(/etc/my.conf)に以下を設定後、mysql再起動後(sudo /etc/init.d/mysqld restart)もう一回トライしたが解決せず。 max_allowed_packet=100Mそして、以下のコマンドで、パラメータを見てみたら反映されておらず。 mysql>
実は非常に有用で、この機能が実は欲しかった!と言う方が続出する機能なのですよね〜 全然知らなかったのですが、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.
UPDATE table_reference SET col_name1 = value1 [, col_name2 = value2, ...] [WHERE where_condition] 指定したテーブル名( table_reference )に格納されているデータの中で、指定したカラム名( col_name )の値を value に更新します。 WHERE 句を指定しなければテーブルに格納されているすべてのデータが更新されます。特定のデータのカラムの値だけを更新したい場合は WHERE 句を指定してください。 カラムに設定する新しい値には、数値や文字列の値の他に関数や式などを設定できます。 [例] id カラムの値が 10 のデータの price カラムの値を 1000 に設定する UPDATE mytbl SET price=1000 WHERE id=10; [例] coun
PHPとMySQLの勉強をするために、手持ちのPCでXAMPP環境をインストールするまではよかったが、MySQLで日本語が正しく表示できるようにするため手こずりました。 同じようにハマる人が出てこないよう、手順をまとめます。 ・XAMPP for Windows 1.6.4 ・MySQL 5.0.45(XAMPP for WindowsのWebページには5.0.51と書いてあるのだが・・・) ・WindowsXP HomeEdition SP2 ふつうにXAMMPのインストーラでデフォルト設定のままインストール。 この状態でMySQLを起動すると となり、みごとにdefault_charsetはlatin1になります。 これはMySQLのバイナリ作成時にこの設定になっていたのでしょうがないでしょう。 これをuft8にしていきます。
SELECTなのにテーブルにロックが掛かる!〜InnoDBトランザクションにおけるINSERT INTO SELECT FROMの罠〜 カテゴリ : 技術全般 2010-10-14 19:37 MySQLのInnoDBはトランザクションが使えたり、行ロックが使えたりして、データの整合性の点でMyISAMに比べて優れています。 業務系アプリになると、データの整合性が重視されることも多く、トランザクションを使うことも増えます。 今回、そのトランザクションを使っていて、思いもよらないクエリがきっかけで、テーブルにロックが掛かってハマりました。 テーブル構造はこのような感じ...。 CREATE TABLE `working` ( `id` int(11) NOT NULL AUTO_INCREMENT, `col` int(11) NOT NULL DEFAULT '0', PRIMARY K
整合性をしっかりとらないといけない処理ではトランザクションをかけるのですが、どうもトランザクションのロック待ちでタイムアウトしてしまうことがあるようです。 java.sql.SQLException: Lock wait timeout exceeded; try restarting transaction トランザクションでテーブル全体にロックがかかってしまう 要するに、「トランザクションを実行するためにロックを獲得しなければいけないが、他のコネクションがロックを握っていて、ロックが獲得できない」ということです。 これの根本的な原因は何かと調べますと、InnoDBでトランザクションを使用するときに、行ロックではなく、テーブル全体にロックがかかってしまう場合がある、というところにたどり着きました。 「InnoDBで行ロック/テーブルロックになる条件」を見ながら、少し試してみます。 テーブ
日付関数の使用例です。次のクエリーはすべての行を、過去 30 日以内の date_col で選択します : mysql> SELECT something FROM tbl_name -> WHERE DATE_SUB(CURDATE(),INTERVAL 30 DAY) <= date_col; またこのクエリーは、将来の日付の行を選択します。 日付値を受け入れる関数は通常、日付時刻値を受け入れ、時刻の部分を無視します。そして時刻値を受け入れる関数は通常、日付時刻値を受け入れ、日付の部分を無視します。 現在の日付または時刻をそれぞれ戻す関数は、クエリー実行の開始時点で、各クエリーにつき一度だけ評価されます。つまり、NOW() などの関数が単一クエリー内で複数回参照されている場合、どの参照でも常に同じ結果が生成されます。(ここで言う単一クエリーには、ストアドプログラム (ストアドルーチン
Webサービスを開発/運用してるモンとしては、いろんなWebサービスを触ってみなきゃアカンってことで、アメリカの若モンに大人気ってふれこみのsnapchatに登録してみた。これでリア充の仲間入りやと思ったが、snapchat友達が同僚二人しかいないうえに、利用シーンがあまり思い浮かばないww オジサン困っちゃいました。画像とか送信できるんだけど、数秒で消えるの。むしろそこがウリっていうね。どうやって遊ぼうか…。 2月はブログ書かなかったなーと思ったのでMySQL小ネタ。世間的にも自分的にも真新しくもなんともないTipsです。 innotopで集計 実は以前、Qiitaに書いたので↓をば。。。 http://qiita.com/la_luna_azul/items/505ca441b8c8e6a87aaa 流れるクエリ、ロックの状況、トランザクション(show engine innodb s
背景 大きなテキストデータを登録しようとした際、エラー発生。 SQLSTATE[HY000]: General error: 2006 MySQL server has gone away データ型は LONGTEXT。入れようとしているデータは1.7M程度。 解決手順 my.cnf→max_allowed_packetを変更します。 現状確認 デフォルト値は1M。 mysql> show variables like 'max_allowed_packet'; +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+ 1 row in
こんにちは。 職人見習いの櫛田です。 MySQLのバグのようでLOAD DATA INFILE文でcsvを追加でインポートした時にAUTO_INCREMENTが連番にならず、インポートしたレコード数にもよりますが、数百番飛んだ値になっていました。 そこで、連番になるようにAUTO_INCREMENTの値を指定して対応しました。 (※MySQLを再起動すれば、連番になるようです。) ○CSVのインポート 20111130.csvというファイルをインポートします。 LOAD DATA LOCAL INFILE "/home/hoge/20111130.csv" INTO TABLE dbname.tablename FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY 'rn' IGNORE 1 LINES (@a,@b,@c
結論から言うと他のサイトで見るような外部キーのややこしい制約にはまったわけではなく、単にテーブル名の不一致だった。 が、基本的にMySQLで外部エラーがでたときは以下のような簡素なメッセージしか出してくれないので原因が判別しづらい。 ERROR 1005 (HY000): Can't create table 'hoge_db_name.huga_table_namer' (errno: 150)そこで、以下のコマンドで最新の外部キー制約エラーの詳細を確認することができる。 SHOW ENGINE INNODB STATUS\G;これを実行するといろいろな項目がずらっとでてくるが、外部キー制約エラーの詳細は LATEST FOREIGN KEY ERRORに書かれている。昔は以下のコマンドだったらしいが、新しめのMySQLだとSyntax Errorではじかれるので注意 SHOW INNO
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く