ODBC を使用したデータの削除
このチュートリアルでは、ODBC を使用して基本的な削除コマンドを実行する方法を学習します。ここでは、CRUD データベース操作の Delete(削除)部分について説明します。
先のチュートリアルで作成した接続文字列と ZENDB データベースを使用して、右側(このページの内容)に挙げたトピックの手順を実行します。
テーブルから 1 件のレコードを削除する
テーブルから特定のレコードを削除するには、SQL DELETE ステートメントを使用します。
レコードの ID がわかっている場合は、次のように指定することができます。
c.execute("DELETE FROM Students WHERE Id = 7")
別の列の値を指定することもできますが、そのレコードが一意であることを確認する必要があります。
c.execute("DELETE FROM Students WHERE Name = 'Sue'")
変更をコミットすると、レコードはデータベースから削除され、変更を元に戻すことができなくなることに留意してください。
Zen Control Center に戻ってデータを見ると、学生 ID 7 番の Sue はもうテーブルに存在していません。
重要:チュートリアルを続けて次のトピックの「ストアド プロシージャとトリガー」に進むには、残りのデータをこのテーブルに残しておく必要があるので、他のレコードや、テーブル、データベースを削除するステートメントの例は、実際には実行しないでください。
テーブルから複数のレコードを削除する
テーブルから複数のレコードを削除するには、複数のレコードに該当する WHERE 句を指定します。たとえば、専攻(Major)が English であるすべてのレコードを削除することができます。
c.execute("DELETE FROM Students WHERE Major = 'English'")
すべてのレコードを削除するには、WHERE 句を省略するだけです。
c.execute("DELETE FROM Students")
WHERE 句がない場合は、単純にテーブルからすべてを削除します。
テーブルを削除する
テーブルの削除とは、テーブル内のデータも含め、データベースからテーブル全体を削除することを意味します。これを行うには、SQL DROP TABLE ステートメントを使用します。
c.execute("DROP TABLE Students")
メモ:データベースにコミットされていないトランザクションがある場合、Zen はデータベースの削除を許可しません。これに対処するには、Python で毎回トランザクション処理後に commit() を呼び出すか、またはデータベースに最初に接続するときに autocommit=True を設定しておく必要があります。
データベースを削除する
データベースの削除は、Zen Control Center からでも、SQL ステートメントを使用しても行えます。
ZenCC でデータベースを削除するには、削除したいデータベースを右クリックして[削除]を選択します。
ダイアログで選択肢が提示されます。
- データベース名のみを削除した場合、そのデータベース名は ZenCC に表示されなくなり、SQL ステートメントを受け入れることができなくなります。ただし、サポートしているメタデータ、データ辞書ファイル(DDF)は、テーブルの作成に使用するデータ ファイルと一緒に残ります。同じ場所にデータベースを再作成する場合は、以前のデータベースのデータ ファイルおよびメタデータを再利用できます。
- データベース名と DDF の両方を削除した場合は、データ ファイルのみが残ります。このファイルが削除されることはありません。以前のデータベースと同じ場所にデータベースを再作成する場合は、CREATE TABLE ステートメントを使用して、テーブル スキーマおよび列のデータ型のメタデータを復元する必要があります。
SQL では、データベースを削除する 2 つの方法、DROP DATABASE <DB 名> および DROP DATABASE <DB 名> DELETE FILES があります。ZenCC での削除と同様に、データ ファイルは常にそのままの状態で残されます。
詳細: