You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session. Dismiss alert
Go database/sqlチュートリアルのエラーハンドリングの日本語意訳になります。 エラーハンドリング database/sql でのほぼ全ての操作では最後の返り値としてエラーが返却されます。 それらのエラーを必ずチェックし、無視しないでください。 エラー動作が特殊だったり、何かが追加されているケースはいくつかあり、知っておくべきものもあります。 取得行セットの繰り返しによるエラー 以下のようなコードがあるとします。 for rows.Next() { // ... } if err = rows.Err(); err != nil { // ここでエラーを処理する } rows.Err() でのエラーは、 rows.Next() ループ処理内の様々な種類のエラーの結果が入る可能性があります。 ループ処理は正常に終わるだけでなく、何らかの理由によって終了してしまうかもしれません。 そ
この記事は DeNA 20 新卒 Advent Calendar 2020 19日目の記事です。 はじめに MySQLやPostgreSQLに代表されるRDBMSではトランザクションと呼ばれる仕組みが提供されています。多くのWebアプリケーションエンジニアはこのトランザクションを駆使してDBとやりとりをするロジックを組み立てることになります。 しかし不整合を起こしたくない処理があるからといって闇雲にトランザクションを張ったり、トランザクションが張られているからと安心してアプリケーション側で闇雲にロジックを組み立ててしまうと思わぬバグを生むことになってしまいます。 このエントリでは、「トランザクションを張っておけば大丈夫」という考え方は危険な場合もあるということを、ありがちな実装例を交えて紹介していきます。 並列に処理されるトランザクション そもそも、トランザクションは全て直列に処理されるわ
※ InnoDBはREPEATABLE READでもファントムリードが発生しません。 MySQLで実際に試す MySQL(InnoDB)でトランザクション分離レベルを実際に試してみます。 準備 プレイヤーのコイン数を表す簡単なテーブルを作ります。 テーブル構造は次のようになります。 テーブルにplayer1とplayer2のデータを追加します。 2つのターミナルからMySQLに接続します。クライアントAとクライアントBとします(以下はAとBと呼ぶ)。 これで準備は完了です。 READ UNCOMMITTED READ UNCOMMITTEDは一番低いレベルです。 コミットされていない変更を他のトランザクションから参照できる設定です。 ① Aで現在接続中のセッションのトランザクション分離レベルをREAD UNCOMMITTEDに設定して、テーブルを検索します。 ② BでREAD COMMIT
Deleted articles cannot be recovered. Draft of this article would be also deleted. Are you sure you want to delete this article? Disclaimer 当記事はNewSQL開発ベンダの技術ブログや各種論文、その他ニュースサイト等の内容を個人的にまとめたものです。 そのため、理解不足等に起因する誤解・誤認を含む可能性があります。更なる理解が必要な方はリファレンスに挙げた各種文献を直接参照下さい。技術的な指摘は可能であれば取り込み修正しますが、迅速な対応はお約束できません。 NewSQLの解説は二部構成 当記事は前編でNewSQLの概要編となる。 全体の目次は下記である。 NewSQLとは何か NewSQLのアーキテクチャ NewSQLとこれまでのデータベースの比較
ハマりにハマる PDOでMySQLを扱っていたのですが、あるSQLがいっこうに受け付けてもらえません。 エラーも出ないのでSQL文が間違っているわけでもなさそうなのですが…。 不具合かなと思い、いろいろ調べているとPDOはデフォルトでエラーを吐かないという衝撃の事実を知りました。 なんだってーーーー!!! PHP.iniの設定でdisplay_Errorをyesにしていたので出力されるものだと思っていました。 セキュリティを考えるとエラーを吐かない方がいいのはわかっているつもりでしたが、設定は別なんですね。 PDOでは属性を設定することで、エラーの挙動や出力を変更することが可能です。 ちょっとした説明 PDOの属性設定はPDO::setAttribute()で行います。エラー以外にもさまざまな属性が存在しています。 属性の設定は「どの属性の設定か」の指定に続き、「その属性の設定」を行います
Tutorials: Learn SQL step by step 0 SELECT basics Some simple queries to get you started 1 SELECT name Some pattern matching queries 2 SELECT from World In which we query the World country profile table. 3 SELECT from Nobel Additional practice of the basic features using a table of Nobel Prize winners. 4 SELECT within SELECT In which we form queries using other queries. 5 SUM and COUNT In which we
急な仕事が降って沸くことはよくあります。 ソフトウェア開発の現場では、緊急度の高い案件が突然舞い降りて、平和なんてものは一瞬にして覆されることが日常茶飯事です。 だから、グループ合同で行う新卒研修の3時間講義枠を、その前日に依頼されるなんてこともよくある話なんじゃないかと思います。 ……。 ということで、急遽依頼された形で SQL の研修を行うことになりました。 Web -> OOP -> SQL と通算9時間も講義をしている計算になります。 これがなるセミか。 SQL Tutorial 依頼された講義は DB の講義です。 とはいえ、そんなに DB に詳しいわけでもありませんし、であれば今後使うであろう SQL のチュートリアルなんかがいいのかな、と思って今回の講義内容です。 アウトプット合宿を最後に行うので、そこで絶対使いますしね。 スライド 必死に前日に作りました。作業時間は8時間ぐ
version: '2' services: db: image: mysql environment: MYSQL_DATABASE: first_database MYSQL_USER: username MYSQL_PASSWORD: secret MYSQL_ROOT_PASSWORD: password ports: - "3306:3306" volumes: - db-data:/var/lib/mysql volumes: db-data: driver: local この段階で first_database というDBは1つ作られてますが、 同じコンテナの中に second_database というDBを作りつつ、 first_database と second_database それぞれにダンプを投げつけたい、 というのが今回の目的になります。 DockerのMySQL
Visual Studio 2017からSQL Server Express 2016 LocalDBを使ってみました。 データベースを作成して新規にテーブルを追加しデータを登録するまでやってみました。 環境 Windows 7 Professional SP1 64bit Visual Studio 2017 Community ※今回はWindows7で問題なく動作しましたが、SQL Server 2016からWindows7はサポート外となったようです。 https://docs.microsoft.com/ja-jp/sql/sql-server/install/hardware-and-software-requirements-for-installing-sql-server SQL Server LocalDBとは LocalDBは、SQL Serverを利用したアプリケー
Visual Studio 2017でSQL Server LocalDBを使ったWindowsフォームアプリを開発してみました。 LocalDBをプロジェクトに組み込みアプリケーションと一緒に配布できるようにしてみました。 環境 Windows 7 Professional SP1 64bit Visual Studio 2017 Community SQL Server Express 2016 LocalDB ※今回はWindows7で問題なく動作しましたが、SQL Server 2016からWindows7はサポート外となったようです。 https://docs.microsoft.com/ja-jp/sql/sql-server/install/hardware-and-software-requirements-for-installing-sql-server LocalDB
C# の SqlClient を利用して Microsoft SQL Server に接続する方法をまとめます。 どちらかと言うと基本的な実装例となるようにサンプルコードを作成しました。 概要 大まかには以下のような流れで処理を行います。 接続文字列 の 準備 データベース接続 準備 SQLの実行 以下ではそれぞれについて具体的な方法をいくつか記載していますが、一般的に利用する方法とすれば以下のような実装が普通かと思います。 「とりあえず急ぐので結論を!」と言う方は以下の2か所だけ確認いただければ目の前の課題は乗り切れるハズ。 接続文字列 の 準備 app.config または web.config から取得 データベース接続 準備 using と try-catch を用いた実装例 SQLの実行 接続文字列 の 準備 接続文字列の作り方は大きく3パターンあるかと思います。 ソースコード上
コメントを含めてテーブルを作成する mysql> create table test( -> message varchar(200) comment 'カラムのコメント' -> ) -> engine=MyISAM -> default charset=utf8 -> comment='テーブルのコメント'; Query OK, 0 rows affected (10.91 sec) カラムのコメントは「comment '入れたいコメント'」という形式 テーブルのコメントは「comment='入れたいコメント'」という形式 書き方が微妙に違うので紛らわしい。 コメントの確認 mysql> select column_name, column_comment from information_schema.columns where table_name='test'; +--------
来る2月27日、データベースの新書籍を発売させて頂くことになった。タイトルは「理論から学ぶデータベース実践入門 ~リレーショナルモデルによる効率的なSQL」となっている。単に「データベース」と書いてあるが、RDBがメインのテーマの書籍である。 多くの人が未だにRDBを使いこなせていないのではないか。RDBの使い方をマスターするには何が必要なのか。それがここ数年私が追ってきたテーマであり、この書籍を出すことになった動機である。 あまりにも酷いDB設計、あまりにもスパゲティなクエリ、あまりにも希薄なデータモデルへの理解。そういった問題はどこから生み出されるのか。そのひとつの結論としてたどり着いたのが、「そもそもRDBの使い方があまり理解されていないのではないか」ということだった。名著、SQLアンチパターンでは「やってはいけないケース」について学ぶことができるが、その反対のテーマ、つまり本来どの
SQLite は、軽量で組み込み型のリレーショナルデータベース管理システムです。そのシンプルさと使いやすさから、モバイルアプリ、デスクトップアプリ、IoT デバイス、組み込みシステムなど、さまざまな環境で利用されています。 SQLite の最大の特徴はサーバーレスであることです。 MySQL や PostgreSQL などはサーバー型のデータベースですが、 SQLite は専用のサーバーを必要とせず、データベースを利用するアプリケーションと同じプロセス内でデータを操作できます。また SQLite はデータベース全体を 1 つのファイルで管理します。そのため、バックアップや別の環境への移行も、ファイルをコピーするだけで簡単に行えます。 SQLite は手軽に利用でき、モバイル環境を含む多くのプラットフォームで動作するため、アプリや組み込みシステムを含む、小規模なデータ管理で広く利用されていま
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 (""); どちらのス
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く