android.database.sqlite.SQLiteException: near "ON" : syntax error(代码 1)



这是我在服务器上用来创建表的MySQL代码。。。

CREATE TABLE brand_names (
    id int(7) unsigned NOT NULL AUTO_INCREMENT,
    brand_name varchar(255) NOT NULL,
    parent_company_id int(7) NOT NULL DEFAULT '0',
    last_modified_on timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    PRIMARY KEY (id),
    UNIQUE KEY brand_name (brand_name),
    FULLTEXT KEY name (brand_name)
) ENGINE=MyISAM AUTO_INCREMENT=225 DEFAULT CHARSET=latin1

我正试图通过使用…在Android中复制同一张表。。。

CREATE TABLE brand_names (
    _id integer PRIMARY KEY AUTOINCREMENT,
    brand_name text NOT NULL,
    parent_company_id integer NOT NULL DEFAULT '0',
    last_modified_on datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE SET DEFAULT
)

然而,我得到了这个例外。。。

android.database.sqlite.SQLiteException: near "ON": syntax error (code 1): , while compiling: CREATE TABLE brand_names (_id integer PRIMARY KEY AUTOINCREMENT, brand_name text NOT NULL, parent_company_id integer NOT NULL DEFAULT '0', last_modified_on datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE SET DEFAULT);

所以ON部分似乎有问题。(注意-我试图用ON子句实现的只是使其在更新行时,last_modified_ON datetime将自动设置为当前时间。

我看过这个SQLite页面,它看起来我的语法是正确的,但很明显有些地方出了问题,所以我有点困惑。有人能帮忙解决吗?

正确的是

CREATE TABLE brand_names (
    _id integer PRIMARY KEY AUTOINCREMENT,
    brand_name text NOT NULL,
    parent_company_id integer NOT NULL DEFAULT '0',
    last_modified_on datetime NOT NULL DEFAULT CURRENT_TIMESTAMP);

您最后使用的是ON UPDATE SET DEFAULT,这是错误的语法。

last_modified_on datetime将使用DEFAULT CURRENT_TIMESTAMP自动设置为当前时间。

您从SQLite文档中看到的内容与您想要实现的内容完全不同。

假设您有一个id为parent_company_id-的父表,则以下查询将起作用

CREATE TABLE brand_names(_id integer PRIMARY KEY AUTOINCREMENT,
brand_name text NOT NULL, parent_company_id integer NOT NULL DEFAULT '0', 
last_modified_on datetime NOT NULL REFERENCES parent(parent_company_id) 
ON UPDATE SET DEFAULT);

这将更新父记录的parent_company_id(外键约束的父键)列,而不会破坏两个表parentbrand_names之间的引用完整性。

只有当父关键字的值被修改,使得新的父关键字值不等于旧的父关键字时,才采取ON UPDATE操作。因此,它用于配置在修改现有行的父键值时发生的操作(ONUPDATE)。它们与SQLite数据库中的每个外键相关联。

相关内容

最新更新