おはようございます。じぇいかわさきです。
せっかく作成したDBのテーブルですが、作った後でよくよく考えたら、間違っていることに気が付いたんです。
それは基本中の基本。ふと会社でAccessを使っているときに気が付いたんですよ。
今回は、その対応のために折角作ったテーブルを作り直します。

作ったテーブルには欠陥があった
折角、みようみまねでテーブルを作成したのですが、作ったテーブルをよくよく見てみると、大きな間違いをしていたんです。
その時に使用したSQL文は以下の通り。
create table temphumd ( data varchar(20), temp varchar(5), humd varchar(5));
データベースが分かっている人なら、すぐに気が付いただろうね。
そう、このSQL文ではデータが無い場合も許すようになっている。
更に言うと、データが重複しても良い構造になってしまっている。
これはデータベースとしては、大問題な事になる。
そこで、折角作ったテーブルであるが、一旦削除して作り直すことにした。
まずはできているテーブルを再度確認し、削除するために、以下のSQL文を実行。
ログイン後にiotdataと言うデータベースに移行し、テーブルを確認。
show tables;
前回作ったテーブルを確認したので、そのテーブルを削除する。
drop table temphumd;
Query OKでテーブルが削除された。

データベースの特徴を生かすようにテーブルを作り直す
それでは、データベースの特徴として、重複データを防ぐためにユニークな値をプライマリーキーとして登録する必要がある。
今回の場合、ユニークな値になるものと言えば、タイムスタンプなので、こいつのCOLをプライマリーキーとして設定する。
そして、データが無かった場合に、空をデータとして書き込まないように、空を禁止することを宣言してやる。
つまり、先にテーブルを作った時のSQL文は以下だが
create table temphumd ( data varchar(20), temp varchar(5), humd varchar(5));
それに、先の2つの条件を付加したSQL文となるのは次の通り。
create table temphumd ( data varchar(20) not null, temp varchar(5) not null, humd varchar(5) not null, primary key(date);
これで実行していたら・・・・
あらま、ERROR 1064と言うSyntaxエラーとなった。
はて?
create table temphumd ( data varchar(20) not null, temp varchar(5) not null, humd varchar(5) not null, primary key(date));
焦ったあまり、最後の)を入れるのを忘れてしまったようだ。

できたテーブルを最終確認
さて、凡ミスエラーを一度発生させたが、基本的にはQuery OKでテーブルは完成したようなので、確認をしてみる。
show tables;
もう一度同じ名前のテーブルが出来上がっているのが確認出来た。
次はテーブルの内容が、新規に作成した内容になっているかの確認だ。

今度は、テーブルの中身、すなわちCOLの状態がどのように設定されているかを確認してみる。
こちらは簡単なSQL文で確認できる。
desc temphumd;
全項目で、空を禁止するNULLの指定がすべてNOになっている。
そして、fildのdateのCOLにPRIのKEYが設定されているのが確認できる。

これで、データベースの基準を守ったテーブルができ上った。
今度は本当にホントの完了だ。いよいよデータを流し込んでみたいと思ったが、一旦休憩して心を静める事にした。
焦ってやると、失敗が増えると言う経験をいつもしているので、焦る気持ちを抑えるのが大事。
まとめ
一度は完成したと思ったテーブルだったが、よくよく考えた時にミスが有る事に気が付いた。
これはある意味ラッキーだったと思わなければいけないよね。
本格的なデータベースって、あまり使うことが無いので基本的なルールをよく知っていないと言う事もあるが、SQL文を直接書くと言うことに成れていないのも大きな要因ですね。
普段使いでは、Accessみたいにアプリ側で勝手に設定してくれる部分も多々あるので、それを自分で全てマニュアル設定するとなると、データベースの原理が分かっていないと難しい。
とは言え、ネットで探してここまでできるのだから、先駆者にはホント感謝しなければいけないね。
自分も、失敗など特に初心者ならではの事が多々あるので、初めて使ってみる人などに、困った時の参考になればありがたい。
一進一退を繰り返すIoTに挑戦だが、センサーの動作じたいより、そのデータを格納したり管理したりする方が、はっきり言ってややこしい、そう自分は思った。
しかし、間違えば必ず間違って動く。嘘をつかないのが、やってて楽しい。
ハマると、時間を忘れてしまうので非常に恐ろしいんですよね。
[twt]
