AUTO_INCREMENT
キーワードはMySQLに固有です。
SQLiteにはキーワードAUTOINCREMENT
があります (アンダースコアなし)これは、列が、テーブルでこれまで使用されたことのない単調に増加する値を自動生成することを意味します。
AUTOINCREMENT
を省略した場合 キーワード(現在表示しているスクリプトのように)、SQLiteはROWIDを新しい行に割り当てます。これは、テーブル内の現在の最大のROWIDよりも1大きい値になることを意味します。これにより、テーブルの上限から行を削除してから新しい行を挿入すると、値が再利用される可能性があります。
http://www.sqlite.org/autoinc.html を参照してください。 詳細については。
このスクリプトを変更してAUTOINCREMENT
を追加する場合 キーワード、この行を変更できるようです:
gsub( /AUTO_INCREMENT|auto_increment/, "" )
これに:
gsub( /AUTO_INCREMENT|auto_increment/, "AUTOINCREMENT" )
コメントを再確認してください:
さて、sqlite3を使用してダミーテーブルで試してみました。
sqlite> create table foo (
i int autoincrement,
primary key (i)
);
Error: near "autoincrement": syntax error
どうやらSQLiteはautoincrement
を必要とします 列レベルに従ってください 主キーの制約。テーブルレベルの制約として、最後にpk制約を配置するというMySQLの規則には満足していません。これは、SQLite CREATETABLEのドキュメント
の構文図でサポートされています。 。
primary key
を入れてみましょう autoincrement
の前 。
sqlite> create table foo (
i int primary key autoincrement
);
Error: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
そして明らかにSQLiteは「INT」が好きではなく、「INTEGER」を好みます:
sqlite> create table foo (
i integer primary key autoincrement
);
sqlite>
成功!
そのため、awkスクリプトはMySQLテーブルDDLをSQLiteに簡単に変換できません。
コメントを再確認してください:
SQL ::Translater 、これは大変な作業です。完全に機能するスクリプトを作成するつもりはありません。
これを実際に解決し、すべての構文変更を自動化してDDLをSQLiteと互換性のあるものにすることができるスクリプトを作成するには、SQLDDL用の完全なパーサーを実装する必要があります。これをawkで行うのは実用的ではありません。
スクリプトを一部に使用することをお勧めします キーワード置換の場合の例を示し、さらに変更が必要な場合は、テキストエディタで手動で修正します。
また、妥協することを検討してください。 AUTOINCREMENT
を使用するためにDDLを再フォーマットするのが難しすぎる場合 SQLiteの機能については、デフォルトのROWID機能が十分に近いかどうかを検討してください。違いを理解するには、上記のリンクを読んでください。