特定の株価を随時更新するMySQLを組みます。
テーブルは
in_ver
time VARCHAR(30),price_s INT(10)
price_ver
time VARCHAR(30),price_s INT(10)
となっています。
【株価の取得とMySQLへのインサートについて】
まずは、市況を拾ってきて、その時間(timestamp)とその時点の価格をin_verテーブルのtimeカラムとprice_sカラムとにインサートします。
timeカラムについては、現在のUNIX_TIMESTAMP(例 1524357960)がVARCHARとして挿入されます。(INTで挿入は不可)
in_verに挿入された timeとprice_s は下記のトリガーを使いprice_verにコピーされます。
【下記のトリガーの役割】
in_verテーブルには時折、現在のUNIX_TIMESTAMP(例 1524357960)ではなく数時間前のTIMESTAMPと価格が挿入されることがあるため、下記のトリガーは「最新価格だけを挿入することを目的とし、それら間違った価格を排除する」役目を負います。
まずは @newtime=(SELECT cast(NEW.time as unsigned)); をセットして、VARCHARのタイムスタンプをINT形式に修正します。
次に@time60=(SELECT UNIX_TIMESTAMP()-60);をセットし、現在のタイムスタンプの60秒前の時間を取得します。
その上で
IF (@newtime >@time60) で仕分けし、数時間前の価格を排除した上で、トリガーをスタートさせます。
mysql
1DELIMITER // 2CREATE TRIGGER tri_ver 3AFTER INSERT ON in_ver 4FOR EACH ROW BEGIN 5 6SET @newtime=(SELECT cast(NEW.time as unsigned)); 7SET @time60=(SELECT UNIX_TIMESTAMP()-60); 8 9IF (@newtime >@time60) 10THEN 11INSERT INTO price_ver SET 12 13price_ver.time=NEW.time,price_ver.price_s=NEW.price_s; 14 15 16END IF; 17 END; 18// 19DELIMITER ; 20 21
結果
コピーされません。(トリガーがうまく作動していません)
in_verテーブルにはちゃんと挿入されているため、トリガーがエラーになったわけではなく、トリガーの記載方法に問題があるものだと思います。(IF文の書き方、またはSET方法が正しくない)
どこに間違いがございますでしょうか?
よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。