質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Q&A

解決済

1回答

3515閲覧

SQLite3のテーブルのフィールドのデータ型を変更したい。

con2319

総合スコア51

SQLite

SQLiteはリレーショナルデータベース管理システムの1つで、サーバーではなくライブラリとして使用されている。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

0グッド

0クリップ

投稿2021/09/01 10:00

やりたい事
・現在フィールドのデータ型がINTEGRなのをTEXT型にしたい。

ダメなところ
・ALTER TABLE book ALTER book_pic_ad TEXTを実行させたところ下記のようなエラーが出る。

 エラーがありましたが、実行が終了しました。
結果: near "ALTER": syntax error
1 行目:
ALTER TABLE book ALTER

どうすればデータ型を変更できるでしょうか?
わかる方いれば教えていただきたいです。
宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

残念ながら、SQLiteは列のデータ型を変更するDDLをまだサポートしていないようですね。
私はバージョン3.36を使っていますけど、modify columnは悉く失敗します。

したがって、変更手順としてはTEXT型のbook_pic_ad列を定義した新しいテーブルを作り
オリジナルから新テーブルにデータをコピーした後、オリジナルは何らかの名前にリネーム、
新しく作ったテーブルはオリジナルの名前(book)にリネームという形になりそうです。

・SQLite 3 カラムの型を変更する
・本家 ALTER TABLE
・ALTER TABLE Statement

本家の手順をそのまま踏襲した場合、
con2319さんご提示の例ですと、要約したDDLは以下のようになるのでしょう。

SQL

1-- 1. TEXT型で再定義した列を含んだ一時テーブルを作成 2CREATE TABLE IF NOT EXISTS temp ( ..., book_pic_ad TEXT, ... ); 3-- 2. 一時テーブルへデータをコピー 4INSERT INTO temp SELECT ..., cast(book_pic_ad AS TEXT), ... FROM book; 5-- 3. オリジナルのテーブルを適当な名前にリネーム 6ALTER TABLE book RENAME TO book_old; 7-- 4. 一時テーブルの名前をオリジナルのテーブル名に変更 8ALTER TABLE temp RENAME TO book; 9-- 5. ( DBのバックアップがある場合は )以前に利用していたテーブルを削除 10DROP TABLE IF EXISTS book_old; 11-- 6. 念のためテキスト型に変更した列のデータ型を確認 12SELECT book_pic, typeof(book_pic) chk FROM book;

投稿2021/09/01 12:18

mayu-

総合スコア335

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

con2319

2021/09/01 12:43

あれま~そうなんですね そうですとネット出てるようなSQL命令文を全部使えるSQLはMYSQLくらいですかね?
con2319

2021/09/01 12:56

最終的にcreate文をコピーしてSQL文でコピペしてそこで直すものだけ直して作り直しました。 すぐできますがなんか負けた気がして嫌なものですね
mayu-

2021/09/01 13:07

メジャーどころのDBMSは、DDLのサポートが充実しており、 記述方法に多少差異が見られるくらいで 機能の差や優劣は、ほぼ無いでしょう。 列のデータ型を変更するDDLにおいても   ALTER TABLE テーブル名 までの記述は、大体どのDBMSも共通していますけど その後に続く構文は DBMS毎に記述が異なりますから 結局は公式のドキュメントを読む必要があるように思います。 以下どちらかの構文を採用してることが多いですね。 ALTER TABLE [テーブル名] ALTER COLUMN [カラム名] TYPE [データ型] ALTER TABLE [テーブル名] MODIFY COLUMN [カラム名] [データ型]
con2319

2021/09/01 13:08

下記の構文をどれも試してもできなかったので教えていただき助かりました。
con2319

2021/09/01 13:18

あらま、SQL系はSQLiteしか使ってないのでそしたら別のSQLのがいいかもしれませんね。 ちなみにmayuさんはデータベースエンジニアですか?
mayu-

2021/09/01 17:32 編集

.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問