[過去ログ] スレ立てるまでもない質問はここで 164匹目 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
93(5): デフォルトの名無しさん [sage] 2023/05/07(日) 01:25:03.86 ID:6RURAAgh(1) AAS
これ自体はおそらく正しい
>begin;
でトランザクションを開始しておけば
>drop table AAA
でctrl-cして終了してもテーブルは消えない
ただ、今問題なのはなぜセミコロンを打ってない状態でctrl-cしたのにsql文が実行されてしまうのかということだけど
94(1): デフォルトの名無しさん [] 2023/05/07(日) 03:07:48.60 ID:aBZWLqUY(1) AAS
>>93
正しいわけあるかwww
96(1): デフォルトの名無しさん [sage] 2023/05/07(日) 10:21:52.03 ID:xEkqTcpa(1/2) AAS
>>93
そう書かれれば、何を言っているかは分かりますが、
>>9090(5): デフォルトの名無しさん [sage] 2023/05/06(土) 22:21:35.73 ID:h3v77DEJ(1) AAS
>>71
chatgptってしたがって好きだな
SQLite のドキュメンテーションによれば、DROP TABLE コマンドが発行された時点でトランザクションが開始されますが、その後に COMMIT もしくは ROLLBACK コマンドを実行するまでトランザクションは未完了のままになります。また、SQLite はトランザクションの自動コミットモードをデフォルトで有効にしており、各 SQL コマンドが実行されるたびに自動的にトランザクションがコミットされます。
したがって、CTRL+C を押すことによって sqlite3.exe を強制終了させた場合でも、SQLite は DROP TABLE コマンドを実行していたと考えられます。また、自動コミットモードが有効であるため、このコマンドは自動的にコミットされ、テーブルが削除されたという結果になります。
したがって、SQLite の動作としては正常であり、DROP TABLE コマンドをキャンセルする場合は、ROLLBACK コマンドを発行する必要があります。また、トランザクションを明示的に開始して、DROP TABLE コマンドを実行することで、コマンドを途中でキャンセルすることができます。
のように書かれれば(by CharGPT)、なんとなく関連していることは
言っていることは分かっても、細かい点が分かりません。
90にはbegin命令も書いてませんし、
commitやrollbackを実際に使ったことが無く、ちゃんと使い方を覚えてない私には、
commit文やrollback文をどこで発行すればいいのか私には良く分かりませんでした。
100(1): デフォルトの名無しさん [sage] 2023/05/07(日) 12:30:19.36 ID:aFD4R/CC(1) AAS
>>9898(1): デフォルトの名無しさん [sage] 2023/05/07(日) 11:41:22.71 ID:xEkqTcpa(2/2) AAS
>>97
でも、CTRL+C を押すことは「中断しろ」の意味なのに、
ROLLBACKではなく、COMMIT を発行してしまうのはバグという事になりそうです。
ChatGPTは、それがバグであると言うことは認識していないようです。
>でも、CTRL+C を押すことは「中断しろ」の意味なのに、
>ROLLBACKではなく、COMMIT を発行してしまうのはバグという事になりそうです。
そんな現象は起こってないよ
>>90と>>93をよく読んで
122(2): デフォルトの名無しさん [sage] 2023/05/07(日) 15:38:56.81 ID:O0op5Uvp(2/2) AAS
>>93
>ただ、今問題なのはなぜセミコロンを打ってない状態でctrl-cしたのにsql文が実行されてしまうのかということだけど
ソース読んだらセミコロンはEOF相当の副作用完了点ぐらいの意味しかないっぽい
それとone_input_lineに以下のコメントがある
/* ^C trap creates a false EOF, so let "interrupt" thread catch up.(^C トラップは偽の EOF を作成するので、「割り込み」スレッドに追いつかせる。) */
すなわちCtrl+Cの副作用で標準入力にEOFが生成されるなら、process_inputのメインループの入力待ちから制御が戻ってコマンドが実行される
言い換えればブレーキを踏んだ時点で入力した内容が正しければ、それを実行してから停止するがsqlite3.exeの仕様
146(1): デフォルトの名無しさん [sage] 2023/05/08(月) 12:51:41.30 ID:QcAzVd3l(1/3) AAS
>>93
だれも指摘しませんが、transaction の開始は、
start tansaction;
ではないのでしょうか??
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.039s