Mysql
 sql >> база данни >  >> RDS >> Mysql

mysql2sqlite.sh Auto_Increment

AUTO_INCREMENT ключовата дума е специфична за MySQL.

SQLite има ключова дума AUTOINCREMENT (без долното черта), което означава, че колоната автоматично генерира монотонно нарастващи стойности, които никога досега не са били използвани в таблицата.

Ако пропуснете AUTOINCREMENT ключова дума (както скриптът, който показвате в момента), SQLite присвоява ROWID на нов ред, което означава, че ще бъде стойност 1 по-голяма от текущата най-голяма ROWID в таблицата. Това може да използва повторно стойности, ако изтриете редове от горния край на таблицата и след това вмъкнете нови редове.

Вижте 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 следвайте ниво на колона ограничение на първичния ключ. Не е доволен от конвенцията на MySQL за поставяне на ограничението pk в края, като ограничение на ниво таблица. Това се поддържа от синтаксичните диаграми в SQLite документацията за CREATE TABLE .

Нека опитаме да поставим 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 толкова лесно, колкото си мислехте.

Отново вашите коментари:

Опитвате се да дублирате работата на Perl модул, наречен SQL::Преводач , което е много работа. Няма да напиша пълен работещ скрипт вместо вас.

За да разрешите наистина това и да направите скрипт, който може да автоматизира всички промени в синтаксиса, за да направи DDL съвместим със SQLite, ще трябва да внедрите пълен анализатор за SQL DDL. Това не е практично да се прави в awk.

Препоръчвам ви да използвате вашия скрипт за някои от случаите на заместване на ключови думи и след това, ако са необходими допълнителни промени, ги коригирайте на ръка в текстов редактор.

Също така помислете за правене на компромиси. Ако е твърде трудно да преформатирате DDL, за да използвате AUTOINCREMENT функция в SQLite, помислете дали функционалността по подразбиране ROWID е достатъчно близка. Прочетете връзката, която публикувах по-горе, за да разберете разликите.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql заявка ПОКАЗВАНЕ НА КОЛОНИ ОТ таблица като 'colmunname':questions

  2. Google App Script JDBC/MySql:не сте собственик на грешка в нишката

  3. Възстановете поръчките на woocommerce

  4. Не мога да инсталирам разширението php-mysqli на Centos

  5. UTF-8 Проблем с базата данни