这是我在服务器上用来创建表的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(外键约束的父键)列,而不会破坏两个表parent
和brand_names
之间的引用完整性。
只有当父关键字的值被修改,使得新的父关键字值不等于旧的父关键字时,才采取ON UPDATE
操作。因此,它用于配置在修改现有行的父键值时发生的操作(ONUPDATE)。它们与SQLite数据库中的每个外键相关联。