Volatile データの挿入と更新
データの挿入
Volatile テーブルには次のようにデータを挿入します。
Mach> create volatile table vtable (id integer, name varchar(20));
Created successfully.
Mach> insert into vtable values(1, 'west device');
1 row(s) inserted.
Mach> insert into vtable values(2, 'east device');
1 row(s) inserted.
Mach> insert into vtable values(3, 'north device');
1 row(s) inserted.
Mach> insert into vtable values(4, 'south device');
1 row(s) inserted.データの APPEND
Machbase が提供する、高速なリアルタイムデータ挿入 API です。 C、C++、C#、Java、Python、PHP、JavaScript から利用できます。
Mach> create volatile table vtable (id integer, value double);SQL_APPEND_PARAM sParam[2];
for(int i=0; i<10000; i++)
{
sParam[0].mInteger = i;
sParam[1].mDouble = i;
if (SQLAppendDataV2(stmt, sParam) != SQL_SUCCESS)
{
break;
}
}Cluster Edition の APPEND は、Leader Broker を経由する必要があります。
詳細は SDK と連携を参照してください。
データの更新
Volatile テーブルへの挿入時に主キーが重複した場合は、ON DUPLICATE KEY UPDATE 句で既存データを更新できます。
挿入する値で更新
通常の INSERT では、既存データと主キーが重複すると挿入が失敗します。挿入の代わりに既存データを更新する場合は、ON DUPLICATE KEY UPDATE 句を追加します。
- 主キーが重複しない場合は、指定したデータをそのまま挿入します。
- 主キーが重複する場合は、挿入用に指定した値で既存データを更新します。
この機能には、次の制約があります。
- Volatile テーブルに主キーを定義する必要があります。
- 挿入するデータに主キーの値を含める必要があります。
Mach> create volatile table vtable (id integer primary key, direction varchar(10), refcnt integer);
Created successfully.
Mach> insert into vtable values(1, 'west', 0);
1 row(s) inserted.
Mach> insert into vtable values(2, 'east', 0);
1 row(s) inserted.
Mach> select * from vtable;
ID DIRECTION REFCNT
----------------------------------------
1 west 0
2 east 0
[2] row(s) selected.
Mach> insert into vtable values(1, 'south', 0);
[ERR-01418 : The key already exists in the unique index.]
Mach> insert into vtable values(1, 'south', 0) on duplicate key update;
1 row(s) inserted.
Mach> select * from vtable;
ID DIRECTION REFCNT
----------------------------------------
1 south 0
2 east 0
[2] row(s) selected.更新する値を指定
挿入用の値とは異なる列の値で更新するには、ON DUPLICATE KEY UPDATE SET 句を使用します。SET 句で更新値を指定します。
- 主キーが重複しない場合は、挿入用のデータをそのまま挿入します。
- 主キーが重複する場合は、SET 句で指定した値だけを使用して既存データを更新します。
- 主キーの値は更新対象に指定できません。
- SET 句で指定していない列は更新されません。
Mach> create volatile table vtable (id integer primary key, direction varchar(10), refcnt integer);
Created successfully.
Mach> insert into vtable values(1, 'west', 0);
1 row(s) inserted.
Mach> insert into vtable values(2, 'east', 0);
1 row(s) inserted.
Mach> select * from vtable;
ID DIRECTION REFCNT
----------------------------------------
1 west 0
2 east 0
[2] row(s) selected.
Mach> insert into vtable values(1, 'west', 0) on duplicate key update set refcnt = 1;
1 row(s) inserted.
Mach> select * from vtable;
ID DIRECTION REFCNT
----------------------------------------
1 west 1
2 east 0
[2] row(s) selected.最終更新日