質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.49%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

Q&A

解決済

1回答

641閲覧

MySQL(mariadb10)でトリガーで実行される命令を遅らせたいがエラーが出てしまいます

greentail

総合スコア15

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

MariaDB

MariaDBは、MySQL派生のオープンソースなリレーショナルデータベースシステムです。 また、MySQLとほぼ同じデータベースエンジンに対応しています。

0グッド

0クリップ

投稿2022/04/28 13:12

編集2022/04/29 00:54

MySQL(mariadb10)でトリガーで実行される命令を遅らせたいがエラーが出てしまいます

sql

1DELIMITER $$ 2CREATE 3 TRIGGER flagon 4 AFTER UPDATE 5 ON flagtable 6 FOR EACH ROW 7 BEGIN 8 WAITFOR DELAY '01:00:00'; 9 UPDATE flagtable SET flag = 'on' WHERE flag = 'off'; 10 END $$ 11DELIMITER ;

と、flagtable がUPDATEされたのをトリガーとして1時間後に別のUPDATEをしたいと考えています。
しかし
phpmyadminで実行すると

リクエストの処理中に1つ以上のエラーが発生しました
MySQLのメッセージ:#1064 -SQL構文エラーです。バージョンに対応するマニュアルを参照して正しい構文を確認してください

と表示されトリガーを作れません。
WAITFOR DELAY '01:00:00';を消してやるとトリガーが作成出来ます。

「mariadb10 WAITFOR DELAY」などで検索して正しいSQLのマニュアルを探しているのですがそれらしい情報が出てこず困っています。

修正依頼でご教示頂きました、 https://qiita.com/isshy_exception/items/d1746079a8f4e4a3c3a8 のうように WAITFOR DELAYの代わりにSLEEPも使ってみたのですが **リクエストの処理中に1つ以上のエラーが発生しました MySQLのメッセージ:#1415 Not allowed to return result set from a triggerとエラーが表示されます。

エラー文で検索してみたのですが英語のサイトなどが英文のため理解しづらいです。

解決方法ご教示お願いします

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

greentail

2022/04/28 15:12

ありがとうございます。 調べが足りなかったようです・・。
Orlofsky

2022/04/28 16:03

質問は修正できます。 MySQL なのか?MariaDB10なのか正確なバージョンと共に明示したほうが適切なコメントが付き易いです。 出典として、ブログのURLも明記しましょう。 >の代わりにブログで見つけた
greentail

2022/04/29 00:39

ありがとうございます、修正します
guest

回答1

0

ベストアンサー

MySQL 5.6では、以下で定義できました。
想定通りの動作をするのかは未検証。

MySQL

1DELIMITER $$ 2CREATE TRIGGER flagon 3 AFTER UPDATE ON flagtable 4 FOR EACH ROW 5 BEGIN 6 do sleep(3600); 7 UPDATE flagtable SET flag = 'on' WHERE flag = 'off'; 8 END $$ 9DELIMITER ;

なお、select sleep(3600);とした場合、結果があるSQLなので、「Not allowed to return result set from a trigger」となりました。

投稿2022/04/29 06:01

編集2022/04/29 06:04
YT0014

総合スコア1708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

greentail

2022/04/29 11:13

ありがとうございます、想定通り動作しました。 返信遅くなりましてすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.49%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問