1

生徒のデータ(名前とクラス)を一度に1つずつテーブルに追加するPythonスクリプトを作成しました。テーブルは、主キー列、学生名列、および各クラスの列があるように構成されています。スクリプトは、追加するクラスがすでに列として存在するかどうかを確認し、存在しない場合は作成します。次に、現在の学生のその列の下に「true」と書き込みます。

これが私の問題です。ログファイルから、すべてのクエリがデータベースに正しく送信されていることがわかりますが、一部はテーブルに表示されません。これらのクエリを実行すると:

CREATE TABLE Students (idStudents INT NOT NULL, Name VARCHAR(255) NOT NULL, PRIMARY KEY (idStudents)) ENGINE = InnoDB DEFAULT CHARACTER SET = utf8
SET NAMES 'utf8'
INSERT INTO Students (idStudents, Name) VALUES ('1', 'Bror Tao Sjørslev Bojlen')
SELECT column_name FROM information_schema.columns WHERE table_name='Students'
ALTER TABLE Students ADD 3ubmSL5 VARCHAR(20)
UPDATE Students SET 3ubmSL5='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uchSL3 VARCHAR(20)
UPDATE Students SET 3uchSL3='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3udaBH3 VARCHAR(20)
UPDATE Students SET 3udaBH3='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uenA1H1 VARCHAR(20)
UPDATE Students SET 3uenA1H1='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3umaHL4 VARCHAR(20)
UPDATE Students SET 3umaHL4='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uphH2 VARCHAR(20)
UPDATE Students SET 3uphH2='true' WHERE idStudents='1'
ALTER TABLE Students ADD 3uth1 VARCHAR(20)
UPDATE Students SET 3uth1='true' WHERE idStudents='1'

テーブルは次のようになります

つまり、最後のクエリです

UPDATE Students SET 3uth1='true' WHERE idStudents='1'

通過しません。

これが理にかなっていることを願っています。誰かがこの問題に光を当てることができます-それは私を夢中にさせています。

4

2 に答える 2

1

最終的な声明はロールバックされているのではないかと思います。クライアントがステートメントをトランザクションで暗黙的にラップしていると思います。特に、別のステートメントが伴わない限り明示的にコミットされない挿入または更新を含むNavicatロールバックトランザクションを見てきました。それは奇妙な振る舞いですが、私はそれを痕跡を通して見ました。

余談ですが、テーブルのデザインはかなり型破りです。生徒とクラスは別個のエンティティであり、同じテーブルに保存しないでください。ここでは、少なくとも3つの異なるテーブルを組み合わせています。これはうまくスケーリングしません。

編集:

実際、ここに投稿した最初の質問には、この問題が含まれていまし た。Webサービスから呼び出されたストアドプロシージャからレコードを挿入できません

私はそれを思い出しました。:)

于 2012-04-27T18:48:54.563 に答える
0

データベースへの更新のコミットに問題がありますか?私が使用したいくつかのデータベースは、明示的なCOMMITがある場合、または新しいクエリを作成した場合に、前のクエリからの変更をコミットしたことを思い出しているようです。したがって、この場合、最終的な更新はコミットされません。スクリプトが終了し、変更がロールバックされます。

于 2012-04-27T18:43:34.210 に答える