我正在尝试将我的应用程序从mySQL迁移到SQLite,为了做到这一点,我在SQLite中重新创建了所有mySQL表。
我读到了一个事实,即不建议在声明实际的自动增量字段时使用AUTOINCREMENT。而不是我应该将我的自动增量字段声明为PRIMARY KEY NOT NULL,而SQLite会自动增加它。 一切都很好,除非它不起作用或我不能使用它。
我将Delphi XE与Zeos和SQLite-3
一起使用以下是我的尝试:
1
dm.ZConnection1.Protocol := 'sqlite-3';
dm.ZConnection1.Database := 'myDB.s3db';
dm.ZConnection1.Connect;
dm.ZConnection1.ExecuteDirect('CREATE TABLE IF NOT EXISTS test ('+
' id int AUTOINC PRIMARY KEY,'+
' myval varchar(200) default NULL);');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''first'')');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''second'')');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''third'')');
dm.ZConnection1.ExecuteDirect('insert into test (myval) values (''fourth'')');
如果我运行上面的代码,我的表会生成,但插入的行在ID字段中没有值(我猜是NULL)
然后我尝试用AUTOINCREMENT替换AUTOINC并在创建AUTOINCREMENT附近的表时出现语法错误,所以我假设ZEOS不支持AUTOINCREMENT的声明?!?!
然后我尝试了没有AUTOINC,我只是将ID字段声明为
id int(11)PRIMARY KEY,
我的代码不会给我错误,除了ID字段的值都是空的(没有自动增量)
所以,请让我知道我能做些什么来实现我的需要,而无需手动计算每个插入的下一个id值。它甚至可能吗?
答案 0 :(得分:0)
Some other part of the documentation说:
如果声明的类型名称恰好是“INTEGER”,则PRIMARY KEY列只会变成整数主键。其他整数类型名称(如“INT”或“BIGINT”或“SHORT INTEGER”或“UNSIGNED INTEGER”)会导致主键列表现为普通表列...