MySQL
MySQLは、クラウドまたはオンプレミスでホストされるオープンソースのリレーショナルデータベース管理システムです。
サポートされているエディション
MySQLのすべてのエディションがサポートされています。
WorkatoでMySQLに接続する方法
MySQLコネクターは、MySQLとの認証に基本認証を使用します。 
MySQLに接続するには、次の手順を実行します。
作成 > コネクションを選択するか、Cを2回押します。
MySQLをNew connection(新規コネクション)ページで検索して選択します。
コネクション名フィールドに名前を入力します。
ロケーションドロップダウンメニューを使用して、コネクションを保存するプロジェクトを選択します。
コネクションタイプドロップダウンメニューを使用してクラウドを選択します。または、データベースにWorkatoから直接到達できない場合は、オンプレミスグループを選択します。
MySQLインスタンスのホスト名をHost(ホスト)フィールドに入力します。
ポートフィールドにポート番号を入力します。デフォルトのMySQLポートは3306です。
MySQLのユーザー名をUsername(ユーザー名)フィールドに入力します。
MySQLのパスワードをPassword(パスワード)フィールドに入力します。
同期するデータベースの名前をDatabase(データベース)フィールドに入力します。
任意です。詳細設定を展開して、次の項目を設定します。
Use improved datetime handling(改善された日時処理を使用)を切り替えて、date、datetime、timestampデータ型の強化された処理を有効にします。デフォルトはtrueです。
Database timezone(データベースのタイムゾーン)フィールドをデータベースのローカルタイムゾーンに設定します。デフォルトはUTCです。
接続を選択して、コネクションを検証して保存します。
改善された日時処理
MySQLコネクターでは、datetime、datetime2、およびdatetimeoffsetデータ型の処理の改善を利用するオプションが追加されました。これは各MySQLコネクションのコネクション設定で有効にできます。すべての新規コネクションでは、デフォルトでYesに設定され、タイムゾーンはデフォルトでUTCになります。必要に応じて、これをデータベースのローカルタイムゾーンに変更します。これは、MySQLに行を挿入するすべてのアクションに影響します。
WARNING
MySQLにはさまざまなタイムゾーン設定があります。変更を行っていない場合、MySQLのsystemタイムゾーンはglobalタイムゾーンと同じで、UTCに設定されているはずです。
MySQLコネクションの設定でこれを構成します
動作の概要
| データ型 | Workato入力 | 改善された日時処理がfalse/未選択に設定されている場合 | 改善された日時処理がtrueに設定されている場合 |
|---|---|---|---|
| date | TZなしの時刻 | Workatoワークスペースのタイムゾーンと見なされます。挿入前にUTCに変換 | TZは想定されません。そのまま挿入 |
| date | TZありの時刻 | 挿入前にUTCに変換 | 挿入前にコネクション設定のデータベースタイムゾーンに変換 |
| datetime | TZなしの時刻 | Workatoワークスペースのタイムゾーンと見なされます。挿入前にUTCに変換されます。 | TZは想定されません。そのまま挿入 |
| datetime | TZありの時刻 | 挿入前にUTCに変換されます。 | 挿入前にコネクション設定のデータベースタイムゾーンに変換 |
| timestamp | TZなしの時刻 | Workatoワークスペースのタイムゾーンと見なされます。 +00:00 tzを付けて挿入前にUTCに変換されます | TZは想定されません。そのまま挿入 |
| timestamp | TZありの時刻 | 挿入前にUTCに変換 | 挿入前にコネクション設定のデータベースタイムゾーンに変換 |
メモ
date/datetime/timestampフィールドにカレンダーの日付選択機能を使用する場合、時刻はWorkatoワークスペースのタイムゾーンを使用して定義されます。
接続に必要な権限
少なくとも、データベースユーザーアカウントには、コネクションで指定されたデータベースに対するSELECT権限を付与する必要があります。
MySQLインスタンス内の名前付きデータベース(HR_PROD)に、新しいデータベースユーザーworkatoを使用して接続しようとしている場合は、次のクエリ例を使用できます。
まず、Workatoでの連携ユースケース専用の新しいユーザーを作成します。
CREATE USER 'workato' IDENTIFIED BY 'password';これにより、ユーザーはMySQLインスタンスへのログインアクセス権を持つことができます。ただし、このユーザーはどのテーブルにもアクセスできません。
次のステップでは、HR_PROD内のすべてのテーブルへのアクセス権を付与します。この例では、SELECT権限のみを付与します。
GRANT SELECT ON `HR_PROD`.* TO 'workato';最後に、このユーザーに必要な権限があることを確認します。すべての権限付与を確認するクエリを実行します。
SHOW GRANTS FOR 'workato';これにより、WorkatoでMySQLコネクションを作成するための次の最小権限が返されます。
+---------------------------------------------------------------------+
| Grants for workato@% |
+---------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'workato'@'%' IDENTIFIED BY PASSWORD <secret> |
| GRANT SELECT ON `HR_PROD`.* TO 'workato'@'%' |
+---------------------------------------------------------------------+
2 rows in set (0.24 sec)MySQLコネクターの操作
テーブル、ビュー、ストアドプロシージャ
MySQLコネクターは、すべてのテーブル、ビュー、およびストアドプロシージャで動作します。これらは各トリガー/アクションのピックリストで使用できます。または、正確な名前を指定できます。
選択リストからテーブルまたはビューを選択します
テキストフィールドに正確なテーブル名またはビュー名を指定します
テーブル/ビュー名の大文字と小文字の区別は、データベースの実装によって異なります。データベースがホストされている基盤OSによって、正確なテーブル名またはビュー名を指定する必要があるかどうかが決まります。通常、Windowsではデータベース名とテーブル名は大文字と小文字を区別しません。
単一行と行のバッチ
MySQLコネクターは、1行ずつ、またはバッチでデータベースの読み取りと書き込みをサポートします。バッチトリガーとアクションでは、バッチサイズを指定する必要があります。デフォルトは1バッチあたり100行で、最大は1000行です。
バッチトリガー入力
入力フィールドの違いに加えて、これら2種類の操作の出力にも違いがあります。行を1つずつ処理するトリガーには、その単一行のデータをマッピングできる出力データツリーがあります。
単一行出力
ただし、行をバッチで処理するトリガーは、それらを行の配列として出力します。行データピルは、出力がそのバッチ内の各行のデータを含むリストであることを示します。
バッチトリガー出力
そのため、バッチトリガー/アクションの出力は異なる方法で処理する必要があります。このレシピは、usersテーブルの新しい行に対してバッチトリガーを使用します。トリガーの出力は、Rowsデータピルをソースリストにマッピングする必要があるSalesforce一括更新アクションで使用されます。
バッチトリガー出力の使用
WHERE条件
この入力フィールドは、アクションを実行する行をフィルタリングして識別するために使用されます。次の方法で複数のトリガーおよびアクションで使用されます:
- トリガーで取得する行をフィルタリング
- Select rowsアクションで行をフィルタリング
- Delete rowsアクションで削除する行をフィルタリング
TIP
以下の例は、ユーザー入力でWHERE条件を直接使用する方法を示しています。セキュリティを強化するには、SQLインジェクションを防ぐためにパラメーター付きのWHERE条件を使用します。詳細はこちら
この句は、各リクエストでWHEREステートメントとして使用されます。これは基本的なSQL構文に従う必要があります。 MySQLステートメントを記述するためのルールの完全なリストについては、このMySQLドキュメントを参照してください。
演算子
| Operator | 説明 | 例 |
|---|---|---|
| = | 等しい | WHERE ID = 445 |
| != <> | 等しくない | WHERE ID <> 445 |
| > >= | より大きい 以上 | WHERE PRICE > 10000 |
| < <= | より小さい 以下 | WHERE PRICE > 10000 |
| IN(...) | 値のリスト | WHERE ID IN(445, 600, 783) |
| LIKE | ワイルドカード文字(%および_)を使用したパターン照合 | WHERE EMAIL LIKE '%@workato.com' |
| BETWEEN | 範囲を指定して値を取得 | WHERE ID BETWEEN 445 AND 783 |
| IS NULL IS NOT NULL | NULL値のチェック NULL以外の値のチェック | WHERE NAME IS NOT NULL |
単純なステートメント
文字列値は一重引用符('')で囲む必要があり、使用する列はテーブルに存在している必要があります。
単一列の値に基づいて行をフィルタリングする単純なWHERE条件は次のようになります。
username = 'someone'Select rowsアクションで使用した場合、このWHERE条件は、username列に値'someone'を持つすべての行を返します。入力では、データピルを一重引用符で囲むことを忘れないでください。

WHERE条件でのデータピルの使用
WHEREステートメント内のバッククォート(``)は、テーブル識別子と列識別子に使用します。これは、識別子がMySQLの予約キーワードである場合、または特殊文字を含む場合に必要です。
`username` = 'someone'レシピでは、列識別子にバッククォートを追加することを忘れないでください。

WHERE条件のバッククォートでのデータピルの使用
二重引用符("")も文字列値に使用できますが、他のデータベースではあまり一般的に受け入れられていません。このため、二重引用符よりも一重引用符の方が広く使用されています。
MySQLでは、DATE値とDATETIME値も一重引用符で囲むことが求められます。
created_date > '2018-03-01' and country = 'USA'レシピでは、各値に適切な引用符を使用することを忘れないでください。
混在する列型を含むWHERE条件でのデータピルの使用
複雑なステートメント
WHERE条件にはサブクエリを含めることもできます。次のクエリはusersテーブルで使用できます。
id in (select id from user where created_time < '2020-05-06')Delete rowsアクションで使用すると、ticketsテーブル内の関連行の少なくとも1つでpriority列の値が2であるusersテーブルのすべての行が削除されます。
サブクエリを含むWHERE条件でのデータピルの使用
パラメーターの使用
パラメーターは、SQLインジェクションに対する追加のセキュリティレイヤーを加えるために、WHERE条件と組み合わせて使用します。 WHERE条件でパラメーターを使用するには、まず入力でバインド変数を宣言する必要があります。バインドパラメーターは、変数名の前に:を付けた:bind_variable形式で宣言する必要があります。これが完了したら、すぐ下のセクションで、指定した正確な名前を使用してパラメーターを宣言します。
TIP
バインド変数は列名ではなく、列値の代わりとしてのみ使用してください。
バインド変数を含むWHERE条件
任意の数のバインド変数を指定でき、それぞれに一意の名前を付ける必要があります。一重引用符(')、二重引用符(")、角括弧([])内の:を無視することで、バインド変数を列名および静的値と区別します。
一意キー
すべてのトリガーと一部のアクションでは、これは必須入力です。この選択された列の値は、選択したテーブル内の行を一意に識別するために使用されます。
そのため、選択した列の値は一意である必要があります。通常、この列はテーブルの主キーです(例: ID)。
トリガーで使用する場合、この列は増分である必要があります。この制約が必要なのは、トリガーがこの列の値を使用して新しい行を検索するためです。各ポーリングで、トリガーは前回の最大値より大きい一意キー値を持つ行をクエリします。
この動作を説明するために、簡単な例を使用しましょう。テーブルから行を処理するNew rowトリガーがあるとします。このトリガーに設定されている一意キーはIDです。最後に処理された行のID値は100です。次のポーリングでは、トリガーは新しい行を検索する条件としてID >= 101を使用します。
一意キーとして使用するために選択された列にインデックスが設定されている場合、トリガーのパフォーマンスを向上させることができます。
ソート列
これはNew/updated rowトリガーでは必須です。この選択された列の値は、更新された行を識別するために使用されます。
行が更新されても、Unique key値は同じままです。ただし、最終更新時刻を反映するようにSort columnが更新されている必要があります。このロジックに従って、Workatoはこの列の値を、選択されたUnique key列の値とともに追跡します。 Sort column値の変更が検出されると、更新行イベントが記録され、トリガーによって処理されます。
この動作を説明するために、簡単な例を使用しましょう。テーブルから行を処理するNew/updated rowトリガーがあります。このトリガーに設定されているUnique keyとSort columnは、それぞれIDとUPDATED_ATです。トリガーによって最後に処理された行のID値は100、UPDATED_AT値は2018-05-09 16:00:00.000000です。次のポーリングで、トリガーは次の2つの条件のいずれかを満たす新しい行をクエリします。
UPDATED_AT > '2018-05-09 16:00:00.000000'ID > 100 AND UPDATED_AT = '2018-05-09 16:00:00.000000'
MySQLでは、datetime列型とtimestamp列型のみ使用できます。
最終更新日: