エンジニアの卵の成長日記

ふわっちで配信してますhttps://whowatch.tv/profile/w:kurowasi2525

SQL文でのINDEX句、CONSTRAINT句について

バイトで開発環境を構築している際に、DBのテーブルがうまく作成されていないことに気づき、SQL文を見てみるとみたことないのが。。。
DBの勉強は本当の基礎しかやってこなかったので、皆さんは知っている内容だと思う

INDEX
データの検索速度を向上させるために、どの行がどこにあるかを示す索引のことらしい
目的のデータが見つかるまですべての行を1行ずつ調べるよりも、
f:id:kurowasi2525:20170418223851p:plain

索引を利用して目的の行の場所を見つけてから、そのデータを読み取ったほうが効率的だよねって感じらしい

f:id:kurowasi2525:20170418223853p:plain

テーブルが大きいほど、効果が大きくなるみたい

基本構文

CREATE INDEX インデックス名 ON テーブル名(列名 ASC); ※指定しなくてもASC

重複を許さない

CREATE UNIQUE INDEX インデックス名 ON テーブル名(列名 ASC);

降順

CREATE INDEX インデックス名 ON テーブル名(列名 DESC);

インデックスの削除

DROP INDEX インデックス名;


インデックスの利用
 パフォーマンスの向上
  表の結合条件に使用される列に対してインデックスを作成するとパフォーマンスが向上
  値の分布が大きな(異なる値が多い)列に対してインデックスを作成するとパフォーマンスが向上
 パフォーマンス低下
  値の分布が小さな列に対してインデックスを作成するとパフォーマンスが低下
  テーブルを更新すると、インデックスも更新される。よって、更新頻度が高い場合にインデックスを利用するとパフォーマンス低下



CONSTRAINT
英語で『強制、圧迫、束縛、制約するもの、窮屈な感じ』という意味らしい

CONSTRAINT句はインデックスに似ているらしく、違う点としては、他のテーブルとのリレーションシップも設定できる
MySQLは、関連データのテーブルにまたがる相互参照を可能にする外部キーと、この分散したデータの整合性を維持するために役立つ外部キー制約をサポートする

基本構文

CONSTRAINT 制約の名前 制約

記述例

  CONSTRAINT `制約の名前`
    FOREIGN KEY (`このテーブルの列名を外部キーに設定`)
    REFERENCES `データベース名`.`テーブル名` (`カラム名`)
    ON DELETE NO ACTION ←親テーブルの削除時何もしない
    ON UPDATE NO ACTION ←親テーブルの更新時何もしない

MAMP3.5.1 Apache couldn't be started.

今日のバイトで新しいプロジェクトの開発環境構築を行うことになり、MAMPPHPのバージョンを変えたら以下のエラーを吐くように

エラー
Apache couldn't be started.
Please check your MAMP installation and configuration.


最初に結論を書く
僕の解決法はMAMPのバージョンを最新にする


MAMPのバージョンが古いことにより、PDOなどが古くて新しいPHPに対応してなかったのかと思う(適当)


僕の最初の環境はMAMP3.5.1 PHP5.5.9 この条件だとサーバの起動はできた
しかし、MAMP3.5.1 PHP5.5.38にすると冒頭に書いたエラーが発生


MAMP3系のエラーで既にバイト仲間が苦しんでいて、4系に再インストールすることで解決させていたことを知っていたので、僕もバージョンアップさせる
bin/php/を見てみるとPHP5.5.38が最初から入っている!!!


MAMP4.1.1 PHP5.5.38で起動
勝ち確だと思っていたら冒頭のエラーが発生
その後

MySQLデータベースをアップグレートしてください
MySQLデータベースのアップグレードが必要です。
速やかにアップグレードを実行してください。
メニューの「ツール」>「MySQLデータベースをアップグレード」からアップグレード可能です。

PHPMySQLの問題なのかなと思い
DBのバックアップをとり、指示通りにMySQLをアップグレード

起動してみるが、やっぱり冒頭のエラー


アップデートした際に/conf/apache/httpd.confを昔のプロジェクトのに変えてたので、
4.1.1をインストールした際に作成されたhttpd.confに変更したら起動に成功した

MAMPをアップデートしてからもエラーが発生したのはhttpd.confファイルが古かったからか、昔の案件のhttpd.confファイルがおかしかったのが原因だと思う



※2017/4/25(火) 追記
今日バイトでプロジェクトが変わり、PHP5.5.9に変えたところ冒頭のエラーがまた出た
MAMPのバージョンが古いことによるエラーだと思っていたが、どうやらそうではないらしい
MAMPにはバージョンごとに使えるPHPが限られているっぽい
MAMP4.1.1の場合はこんな感じ?
f:id:kurowasi2525:20170425163958p:plain


今回もどっかで調べてきた内容ではないので、確定情報ではないです。

Additional PHP versions
for MAMP PRO 4.1.1 (Mac OS X)

って書いてあるし、多分そうだと思われる

【Node.js】GoogleAPIのOAuth2の認証が1時間で切れてしまう問題

https://developers.google.com/google-apps/calendar/quickstart/nodejsのサンプルでは
.credentials/calendar-nodejs-quickstart.json

{
    "access_token": "アクセストークン",
    "refresh_token": "アクセストークンを更新するためのトークン",
    "token_type": "Bearer",
    "expiry_date": アクセストークンが使えなくなる期限
}

を作成し、このファイルを更新せずに認証に使っている
この認証は1時間で使えないようになってしまう


ニコ生で放送中に優秀なエンジニアさんが来てくださり、その方に助けてもらいながら解決することができました
本当にありがとうございました!

live.nicovideo.jp


解決策としてはrefreshAccessToken()メソッドを利用する
stackoverflow.com
authorize()メソッドの中を修正する

fs.readFile(TOKEN_PATH, function(err, token) {
    if (err) {
        getNewToken(oauth2Client, callback);
    } else {
        oauth2Client.credentials = JSON.parse(token);
        oauth2Client.refreshAccessToken(function(err, tokens) {
            if (err) {
                console.log(err);
                return;
            }
            oauth2Client.credentials = tokens;
            storeToken(tokens);
        });
        callback(oauth2Client);
    }
});


これで解決!のはず。。。

tomcatプロジェクトのコンテキスト定義を更新の操作が失敗しました

昨日のバイト先で長時間積んだことがありました
それはeclipsetomcatプロジェクトでコンテキスト定義を更新した際に、以下のメッセージが出てきました

操作が失敗しました
Path must include project and resource name: \パス名

社員さんに聞いても、同じバイト仲間に聞いてもわからず
調べても記事が少なく、解決策がない


結局自分の環境で成功した解決策はeclipseの展開フォルダの場所を変えるでした
バイト仲間はCドラ直下に展開しても大丈夫でした
ですが、僕はCドラ直下でダメでしたが、/User/ユーザ名/に再展開したら解決しました

結局権限の問題だったのかな?
バイト仲間も同じような環境のPCのはずなので、ちゃんとした原因はよくわかりませんでした

Windows環境でApache+PHP+MySQL環境を整える

前回の記事でも書いたがSlack Botを利用した鍵管理システムの開発を行っている
kurowasi2525.hatenablog.com

今まではMacで行っていたのですが、メイン機でもやりたいと思いGitからCloneしてから気づいた。。。
そう。Windowsメイン機にPHPApacheが入っていないことを
今までPHPApache環境系の開発はMacでやっていたことを


と、いうことで僕の嫌いな環境構築を行っていきたいと思います
Windowsということでかなり躓きました

続きを読む

CakePHPでvalidateErrorを自分で設定する【message】

今日はバレンタインでしたね
僕はいつも通りバイトでした

午前中はCakePHPの案件、午後はFuelPHPの案件をやったのですが、やっぱりFuelPHP最高ですね
思わずつぶやいてしまいました


そんな話はさておき、今日新しく学んだことはvalidateErrorを自分で設定することです
何を言ってんだこいつって思うと思います(自分でも何を言ってるかわからない)

続きを読む

Slack Botを利用した鍵管理システム

今日は第20回のゼミがあり大学に行っていた

ゼミの内容はPythonで書くCompositeパターンとFlyweightパターンの発表だ

それ関連の記事を貼っておくので良かったら見てください

qiita.com

その後、研究室の課題であるSlackを利用した鍵管理システムの作成をチームで行っていた

続きを読む