Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mysql2sqlite.sh Auto_Increment

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengaturan sonar dengan MySql

  2. MySQL:Hitung pasangan nilai unik dalam baris

  3. Dapatkan tag file mp4

  4. mencatat verbositas mysql 5.7

  5. Cara Memilih Semuanya Sebelum/Setelah Karakter Tertentu di MySQL – SUBSTRING_INDEX()