S-JIS[2023-10-22/2023-12-09]
|
Tsurugi SQLコンソール(tgsql)では、「\」で始まる特殊コマンド以外はSQLとして扱う。
SQLのうち、トランザクションの開始(begin/start)・コミット(commit)・ロールバック(rollback)・実行計画取得(explain)はtgsqlが解釈するが、それ以外はそのままTsurugiサーバーに送られる。
(tgsqlが内部で使っているTsubakuroでは、それらのAPIがSQL実行のAPIとは別に存在している為)
したがって、誤った文字列を入れると、Tsurugiサーバーに送られて、そこでエラーになって返ってくる。
tgsqlでは、ひとつのSQL文はセミコロン「;
」で終わる。
セミコロンが入力されるまでは複数行にわたって入力を続けることが出来る。
tgsqlでは、「--
」あるいは「//
」以降は行コメントとして扱われる。[2023-12-09]
「/*
〜*/
」はブロックコメント。
tgsqlでは、トランザクションを明示的に開始せずに(begin/startを実行せずに)SQLを実行すると、暗黙にトランザクションが開始される。
(「start transaction implicitly」というメッセージが出る)
その際のトランザクションオプションはtgsql起動時のオプションで指定できる。デフォルトはOCC。
以下、tgsql 1.0.1(Tsurugi 1.0.0-BETA1)の例。
tgsql> insert into test values(1, 111, 'abc'); start transaction implicitly. option=[ type: OCC label: "tgsql-transaction" ] Time: 1.533 ms ←暗黙のトランザクション開始の実行時間 Time: 4.024 ms ←insertの実行時間
tgsql> select * from test; start transaction implicitly. option=[ type: OCC label: "tgsql-transaction" ] Time: 22.814 ms [foo: INT4, bar: INT8, zzz: CHARACTER] [1, 111, abc] [2, 222, def] [3, 333, ghi] (3 rows) Time: 67.305 ms
tgsql 1.1.0(Tsurugi 1.0.0-BETA2)から、暗黙にトランザクションを開始した場合は、自動的にコミットされるようになった。[2023-12-09]
create/dropやselect/insertならまだしも、update/deleteはいきなり更新が確定してしまうので、要注意。
tgsql> insert into test values(1, 111, 'abc'); start transaction implicitly. option=[ type: OCC label: "tgsql-transaction" ] Time: 1.93 ms ←暗黙のトランザクション開始の実行時間 (1 row inserted) Time: 3.936 ms ←insertの実行時間 transaction commit(DEFAULT) finished implicitly. Time: 11.287 ms ←暗黙のコミットの実行時間
暗黙にトランザクションを開始した場合に自動コミットするかどうかは、クライアント変数で切り替えられる。
auto-commit.when-transaction-started-implicitlyにfalseを設定すると、(従来通り)自動コミットしない。デフォルトはtrue。
tgsql> \set auto-commit.when-transaction-started-implicitly false auto-commit.when-transaction-started-implicitly=false tgsql> select * from test; start transaction implicitly. option=[ type: OCC label: "tgsql-transaction" ] Time: 1.481 ms [foo: INT4, bar: INT8, zzz: CHARACTER] [1, 111, abc] (1 row) Time: 26.97 ms