这是我在服务器上用来创建表格的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日期时间将自动设置为当前时间。
我已经看过这个SQLite page,看起来我的语法是正确的,但显然有些错误,所以我有点难过。谁能帮忙解决?
答案 0 :(得分:2)
正确的是,
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 ,这是错误的语法。
使用DEFAULT CURRENT_TIMESTAMP
将last_modified_on日期时间自动设置为当前时间。
你从SQLite doc看到的与你想要达到的完全不同。
假设您的父表具有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
操作。因此,这用于配置在修改现有行的父键值(ON UPDATE)时发生的操作。它们与SQLite数据库中的每个外键相关联。