2012-08-05 92 views
0

正如标题所说,Adobe AIR平台中的SQL实现支持“ON DUPLICATE KEY UPDATE”?我无法得到它的工作,但它可能是我使用错误的语法,特别是如果它不同于MySQL语法。文档对于flex中的SQL非常稀少,而我发现的文档中没有提及ON DUPLICATE KEY UPDATE。错误#2044:未处理的SQLErrorEvent:errorID = 3115,operation = execute,message =错误#3115:SQL错误。,details = near'ON':语法错误“Flex/AIR本地SQL支持ON DUPLICATE KEY UPDATE?

如果出现错误,数据库文件根本不会插入任何值。

var insertQuery:String = "INSERT INTO movies(id, title, type, date_added) VALUES('" + 
movieData['id'] + "', '" + 
movieData['title'] + "', '" + 
movieData['type'] + "', '" + 
"2012-01-18 06:05:01" + 
"') ON DUPLICATE KEY UPDATE title = 'TEST', type = 'movie', date_added = '2011-11-11 08:02:01'"; 

它按预期工作,没有“ON DUPLICATE KEY UPDATE”;

回答

1

AIR for SQL基于SQLite。尽管自动解决冲突解决方案不适用于外键,但使用before insert trigger很容易创建替代方案。

+0

我刚刚发现它是SQLite,但你能否详细说明一下吗? – DominicM 2012-08-07 20:21:16

+1

CREATE TRIGGER my_trigger BEFORE UPDATE ON MY_TABLE_NAME FOR EACH ROW BEGIN 选择 RAISE(放弃, 'ACCOUNT_ID违反外键账户(ID)') WHERE new.account_id IS NOT NULL AND(SELECT ID FROM帐户,ID =新.account_id)IS NULL; END; 如果您使用像sqliteman这样的独立工具,这个和其他工具可以帮助您“自动化”创建类似于这样的触发器,这些触发器模仿使用强制实施外键约束。 – 2012-08-08 05:02:11

+0

与使用if语句插入或更新相比,是否有性能改进?我现在去了这个if语句,在发布应用程序的最终版本时会尝试sqliteman,谢谢。 – DominicM 2012-08-09 14:09:08

相关问题