# MySQL

MySQL (opens new window) は、クラウドまたはオンプレミスでホストされるオープンソースのリレーショナルデータベース管理システムです。

# サポートされているエディション

MySQL のすべてのエディションをサポートしています。

# Workato での MySQL への接続方法

MySQL コネクターは、MySQL での認証に基本認証を使用します。設定済みの MySQL コネクション

項目 説明
Connection name この MySQL コネクションに対して、接続先の MySQL インスタンスを識別する一意の名前を付けます。
On-prem secure agent 直接接続が許可されていないネットワークでデータベースを実行している場合は、オンプレミスエージェントを選択します。接続を試みる前に、アクティブなオンプレミスエージェントがあることを確認します。詳細は、オンプレミスエージェントに関するガイドをご覧ください。
Username MySQL に接続するためのユーザー名。
Password MySQL に接続するためのパスワード。
Host ホストされるサーバーの URL。
Port サーバーが動作するポート番号。通常は3306です。
Database 接続する MySQL データベースの名前。
Advanced Settings 強化された日時処理やデータベースタイムゾーンの設定機能など、高度な接続設定が含まれています。

# 強化された日時処理

MySQL コネクターに、datetime、datetime2、および datetimeoffset データ型の改善された処理を利用できるオプションが加わりました。これは、各 MySQL コネクションのコネクション設定で有効にできます。このオプションは、すべての新しいコネクションでデフォルトで Yes に設定され、UTC タイムゾーンが設定されます。必要に応じて、データベースのローカルタイムゾーンに変更してください。この変更は、MySQL に 行を挿入する すべてのアクションに影響します。

WARNING

MySQL にはさまざまなタイムゾーン設定があります。変更がない場合は、MySQL の システム タイムゾーンは グローバル タイムゾーンと同じで、UTC に設定されます。

コネクションの高度な設定

MySQL コネクションの高度な設定

動作の概要

データ型 Workato で入力する内容 オプションを false に設定/未選択 オプションを true に設定
date タイムゾーンなしの時間 Workato ワークスペースのタイムゾーンが想定され、挿入前に UTC に変換されます タイムゾーンは想定されず、そのまま挿入されます
date タイムゾーンありの時間 挿入前に UTC に変換されます 挿入前にコネクション設定の [Database timezone] のタイムゾーンに変換されます。
datetime タイムゾーンなしの時間 Workato ワークスペースのタイムゾーンが想定され、挿入前に UTC に変換されます。 タイムゾーンは想定されず、そのまま挿入されます
datetime タイムゾーンありの時間 挿入前に UTC に変換されます。 挿入前にコネクション設定の [Database timezone] のタイムゾーンに変換されます。
timestamp タイムゾーンなしの時間 Workato ワークスペースのタイムゾーンが想定され、挿入前に UTC (+00:00タイムゾーン) に変換されます。 タイムゾーンは想定されず、そのまま挿入されます
timestamp タイムゾーンありの時間 挿入前に UTC に変換されます 挿入前にコネクション設定の [Database timezone] のタイムゾーンに変換されます。

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~100の間の任意の数字を指定できます。最大バッチサイズは100です。

バッチトリガーの入力 バッチトリガーの入力

これら2つの操作には、入力項目の違いに加えて、出力にも違いがあります。一度に1つの行を処理するトリガーには、その単一行のデータをマッピングできる出力データツリーがあります。

単一行の出力 単一行の出力

それに対して、複数行をバッチ処理するトリガーは、それらを行の配列として出力します。Rows データピルは、出力がそのバッチ内の各行のデータを含むリストであることを示しています。

バッチトリガーの出力 バッチトリガーの出力

そのため、バッチトリガー/アクションの出力は異なる方法で処理する必要があります。このレシピ (opens new window)では、users テーブル内の新規行についてバッチトリガーを使用します。トリガーの出力は、Rows データピルをソースリストにマッピングする必要がある Salesforce のバルク更新アクションで使用されます。

バッチトリガーの出力を使用する バッチトリガーの出力を使用する

# WHERE condition

この入力項目を使用すると、アクションを実行する対象行をフィルタリングして識別できます。以下のように、複数のトリガーおよびアクションで使用できます。

  • トリガーで取得する行をフィルタリングする
  • Select rows アクションで行をフィルタリングする
  • Delete rows アクションで削除する行をフィルタリングする

TIP

以下の例では、ユーザー入力で直接 WHERE 条件を使用する方法を示しています。セキュリティを強化するには、WHERE 条件をパラメータとともに使用して SQL インジェクションを防止するようにしてください。詳細については、こちらを参照してください。

この句は各リクエストの WHERE ステートメントとして使用され、基本的な SQL 構文に従っている必要があります。MySQL ステートメントを記述するためのルールの完全なリストについては、こちらの MySQL のドキュメント (opens new window)を参照してください。

# 演算子

演算子 説明
= 等しい 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 条件でデータピルを使用する

WHERE ステートメントのバッククォート (``) は、テーブルおよび列の識別子に使用されます。識別子が MySQL の予約語であるか、特殊文字が含まれている場合に必要です。

`username` = 'someone'

レシピでは、列識別子にバッククォートを追加することを忘れないようにしてください。

バッククォートを含む WHERE 条件でデータピルを使用する WHERE 条件でデータピルを使用する

二重引用符 ("") は文字列値にも使用できますが、他のデータベースではあまり一般的ではありません。そのため、一重引用符が二重引用符よりも広く使用されています。

また、MySQL では、DATE および DATETIME 値が一重引用符で囲まれていると想定しています。

created_date > '2018-03-01' and country = 'USA'

レシピでは、各値に適切な引用符を使用することを忘れないようにしてください。

列タイプが混在した WHERE 条件でデータピルを使用する 列タイプが混在した WHERE 条件でデータピルを使用する

# 複雑なステートメント

WHERE 条件にサブクエリーを含めることもできます。以下のクエリーは users テーブルに対して使用できます。

id in (select id from user where created_time < '2020-05-06')

これを Delete rows アクションで使用すると、tickets テーブル内の1つ以上の関連付けられた行で priority 列の値が2である、users テーブル内のすべての行が削除されます。

サブクエリーを含む WHERE 条件でデータピルを使用する サブクエリーを含む WHERE 条件でデータピルを使用する

# パラメータの使用

パラメータを WHERE 条件と組み合わせて使用すれば、SQL インジェクションに対するセキュリティを強化することができます。パラメータを WHERE 条件で使用するには、まず入力でバインド変数を宣言する必要があります。バインド変数は :bind_variable の形式で宣言する必要があります。変数名の前には : が付きます。これが終わったら、直下のセクションで、指定した変数名を使用してパラメータを宣言します。

TIP

バインド変数は、列の名前ではなく、列の値の代わりにのみ使用する必要があります。

バインド変数を宣言した WHERE 条件

バインド変数を宣言した WHERE 条件

必要に応じていくつでもバインド変数を使用することができますが、それぞれに固有の名前を指定する必要があります。一重引用符 (')、二重引用符 (")、および角括弧 ([]) 内のすべての : を無視することで、バインド変数を列名および静的値から区別します。

# Unique key (一意のキー)

これはすべてのトリガーと一部のアクションにおいて必須の入力項目です。この列の値は、選択したテーブル内で行を一意に識別するために使用されます。

そのため、選択した列の値は一意である必要があります。通常、この列はテーブルのプライマリキー (ID など) になります。

トリガーで使用する場合、これは増分列である必要があります。トリガーはこの列の値を使用して新規行を見つけるため、この制約が必要です。ポーリングのたびに、トリガーは、以前の最大値よりも大きな一意のキー値を持つ行を照会します。

簡単な例を使ってこの動作を説明します。あるテーブルの行を処理した New row トリガー があるとします。このトリガーに対して設定された 一意のキーID です。最後に処理された行には、ID 値として 100 が設定されています。次のポーリング時、トリガーは新規行を見つける条件として ID >= 101 を使用します。

一意のキー として使用するよう選択した列にインデックスを付けると、トリガーのパフォーマンスが向上します。

# Sort column (列の並べ替え)

これは New/updated row トリガー において必須の項目です。この列の値は、更新された行を識別するために使用されます。

行の更新時、 [Unique key] の値は変わりません。ただし、 [Sort column] は、最後の更新日時を反映するように更新されます。このロジックに従い、Workato ではこの列の値を、選択した [Unique key] 列の値と合わせて追跡します。 [Sort column] の値の変更が検出されると、更新された行のイベントがトリガーにより記録され、処理されます。

簡単な例を使ってこの動作を説明します。あるテーブルの行を処理した new/updated row トリガー があるとします。このトリガーに設定された [Unique key][Sort column] は、それぞれ IDUPDATED_AT です。最後に処理された行には、100ID 値と、2018-05-09 16:00:00.000000UPDATED_AT 値が設定されています。次のポーリング時、トリガーは以下の2つの条件のいずれかを満たす新規行を照会します。

  1. UPDATED_AT > '2018-05-09 16:00:00.000000'
  2. ID > 100 AND UPDATED_AT = '2018-05-09 16:00:00.000000'

MySQL の場合、 datetime および timestamp の列型のみを使用できます。


Last updated: 2023/8/31 1:07:14