AUTO_INCREMENT
kata kunci khusus untuk MySQL.
SQLite memiliki kata kunci AUTOINCREMENT
(tanpa garis bawah) yang berarti kolom otomatis menghasilkan nilai yang meningkat secara monoton yang belum pernah digunakan sebelumnya dalam tabel.
Jika Anda mengabaikan AUTOINCREMENT
kata kunci (seperti yang dilakukan skrip yang Anda tampilkan saat ini), SQLite menetapkan ROWID ke baris baru, yang berarti itu akan menjadi nilai 1 lebih besar dari ROWID terbesar saat ini dalam tabel. Ini dapat menggunakan kembali nilai jika Anda menghapus baris dari bagian atas tabel lalu menyisipkan baris baru.
Lihat http://www.sqlite.org/autoinc.html untuk lebih jelasnya.
Jika Anda ingin memodifikasi skrip ini untuk menambahkan AUTOINCREMENT
kata kunci, sepertinya Anda dapat mengubah baris ini:
gsub( /AUTO_INCREMENT|auto_increment/, "" )
Untuk ini:
gsub( /AUTO_INCREMENT|auto_increment/, "AUTOINCREMENT" )
Kembali komentar Anda:
Oke saya coba di tabel dummy menggunakan sqlite3.
sqlite> create table foo (
i int autoincrement,
primary key (i)
);
Error: near "autoincrement": syntax error
Rupanya SQLite membutuhkan autoincrement
ikuti tingkat kolom kendala kunci utama. Itu tidak senang dengan konvensi MySQL menempatkan batasan pk di akhir, sebagai batasan tingkat tabel. Itu didukung oleh diagram sintaks dalam dokumentasi untuk CREATE TABLE
SQLite .
Mari kita coba letakkan primary key
sebelum autoincrement
.
sqlite> create table foo (
i int primary key autoincrement
);
Error: AUTOINCREMENT is only allowed on an INTEGER PRIMARY KEY
Dan ternyata SQLite tidak menyukai "INT", ia lebih suka "INTEGER":
sqlite> create table foo (
i integer primary key autoincrement
);
sqlite>
Sukses!
Jadi skrip awk Anda tidak dapat menerjemahkan DDL tabel MySQL ke SQLite semudah yang Anda kira.
Kembali komentar Anda:
Anda mencoba menduplikasi karya modul Perl yang disebut SQL::Penerjemah , yang banyak pekerjaan. Saya tidak akan menulis naskah lengkap untuk Anda.
Untuk benar-benar mengatasi ini, dan membuat skrip yang dapat mengotomatiskan semua perubahan sintaks untuk membuat DDL kompatibel dengan SQLite, Anda perlu mengimplementasikan parser lengkap untuk SQL DDL. Ini tidak praktis untuk dilakukan di awk.
Saya sarankan Anda menggunakan skrip Anda untuk beberapa kasus penggantian kata kunci, dan kemudian jika perubahan lebih lanjut diperlukan, perbaiki dengan tangan di editor teks.
Juga pertimbangkan untuk membuat kompromi. Jika terlalu sulit untuk memformat ulang DDL untuk menggunakan AUTOINCREMENT
fitur di SQLite, pertimbangkan apakah fungsionalitas ROWID default cukup dekat. Baca tautan yang saya posting di atas untuk memahami perbedaannya.