3

最初は使用されていなかった列を使用して作成しましたが、現在は値を設定および取得しています

列名が正しくないことがわかりました。列名を変更したいのですが、既存のデータベースのデータをデバイスに保持したい

sqliteの列を確認して名前を変更するクエリはありますかこのようなもの

Alter Table MyTable RENAME COLUMN IF EXISTS MyColumn TO MyColumn1;

既存のデータベースはユーザー側で使用されており、ユーザーのスローアウトインドが使用しています助けてください

ノート:

1.例外をスローしたくない

2.テーブルも再作成したくない

どちらの方法でもタスクを達成できることはわかっていますが、それはベストプラクティスではありません

作り直すより貧弱な名前で生きていく

このようにテーブルを確認できるので、列を確認できることを願っています

SELECT name FROM sqlite_master WHERE type='table' ORDER BY name;

また

SELECT name FROM sqlite_master WHERE type='table' AND name = 'MyTable';
4

2 に答える 2

8

私の知る限り、あなたが求めることを行う方法はありません。ただし、使用できます

SELECT sql FROM sqlite_master
WHERE tbl_name = 'table_name' AND type = 'table'

列が存在するかどうかを確認します。ただし、列の名前を変更する必要があるだけなので、テーブルの再作成に問題があるかどうかはわかりません。再作成は、データの損失を意味するものではありません。

手順は次のようになります。

  1. BEGIN TRANSACTION;
  2. ALTER TABLE table RENAME TO tmp_table;
  3. CREATE TABLE table (columnNames);
  4. INSERT INTO table(columnNames) SELECT columnNamesWrong FROM tmp_table;
  5. DROP TABLE tmp_table_name;
  6. COMMIT;

これが面倒な場合は、ツールを使用してください。

ベスト プラクティスの部分については、テーブルに適切な名前を付けることがベスト プラクティスです。通常、フィールド名を中心にすべてのクエリを作成するため、列の名前を変更すると、それらのクエリが壊れることになります。あなたが探しているものはわかりませんが、sqlite のマニュアルには次のように記載されています。

SQLite は ALTER TABLE の限定されたサブセットをサポートします。SQLite の ALTER TABLE コマンドを使用すると、ユーザーはテーブルの名前を変更したり、既存のテーブルに新しい列を追加したりできます。列の名前を変更したり、列を削除したり、テーブルから制約を追加または削除したりすることはできません。

できないことに注意してください。

于 2013-08-08T08:31:17.200 に答える
1

SQLite で列の名前を変更することは実際に可能です。

  1. 次のクエリを実行して、テーブル定義を読み取ります。

    SELECT sql FROM sqlite_master WHERE type='table' AND name='MyTable'
    

    CREATE TABLEこれにより、ステートメント全体が得られます。

    次に、コードで、このテーブル定義に古い列名または新しい列名が含まれているかどうかを確認する必要があります。すでに新しい名前が付けられている場合は、停止します。そうでない場合は、古い名前を新しい名前に置き換えます。

  2. 次のマジック コマンドを実行して、テーブル定義の変更を許可します。

    PRAGMA writable_schema = on
    
  3. sqlite_masterテーブル内のそのレコードを新しいテーブル定義で更新します。

    UPDATE sqlite_master SET sql = ? WHERE type='table' AND name='MyTable'
    
  4. 危険な設定を元に戻します。

    PRAGMA writable_schema = off
    

これは非常に危険なメカニズムであることに注意してください。SQLite は、sql列内のテキストを使用してデータがデータベース ファイルに格納される方法を決定するため、列名以外のほとんどすべてを変更すると、間違いなくデータベースが破損します。

于 2013-08-08T09:43:25.813 に答える