IoTに挑戦

【IoTに挑戦】テーブル作成でとんだ間違いとしてしまったので再構築

データベーステーブル

おはようございます。じぇいかわさきです。

スポンサーリンク

 

せっかく作成した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]

ABOUT ME
じぇいかわさき
進撃の社畜/弱小プロブロガー 本ブログは、還暦で定年の世代の筆者が、まだまだやれるという事を証明するために新たな事に挑戦した事を情報発信しているブログです。同世代の人達に対して、まだまだいろいろと頑張れる、第二の人生を楽しく生きていく為に現状維持は退化、失敗の反対は行動しないことを座右の銘とし、思い立ったことにチャレンジした記録です。また、せっかく稼いだ収益を騙し取られないように、毎日来る迷惑メールなどのネットリテラシーについても情報発信をしています。 このブログは ネットリテラシー ブログ 働くこと について書いており、第二の人生で頑張る同世代の心に刺さる記事を目指してます。人生100年、まだまだがんばれます。 >> Twitterをフォローする