范围:两张桌子。当创建一个新的顾客时,他们会将一些关于它们的信息存储到第二个表中(这也是使用触发器完成的,它按预期工作)。这是我的表结构和关系的一个例子。
表1->的惠顾
+-----+---------+-----+
+ id + name + val +
+=====+=========+=====+
+ 37 + george + x +
+-----+---------+-----+
+ 38 + sally + y +
+-----+---------+-----+
表2 - >的 patron_info
+----+-----+----------+
+ id + pid + name +
+----+-----+----------+
+ 1 + 37 + george +
+----+-----+----------+
+ 2 + 38 + sally +
+----+-----+----------+
管理员可以管理顾客。当他们选择移除顾客时,顾客将从表1 patrons
中移除。此时,表2 patron_info
没有任何反应。
当表1删除了一个项目时,我只是试图创建一个从表2中删除的触发器。这是我尝试过的......
最初,我尝试放下触发器(如果它存在)(只是为了清除空气)......
DROP TRIGGER IF EXISTS log_patron_delete;
然后我尝试创建触发器......
CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
WHERE patron_info.pid = patrons.id
END
此时,我收到语法错误1046: Check syntax near END on line 6
。我不知道此时的错误是什么。我尝试了几种不同的变化。另外,我需要在这里使用分隔符吗?
任何人都可以帮助恢复我的理智吗?
答案 0 :(得分:41)
我认为触发器代码中存在错误。 由于您要删除所有已删除的顾客ID的行,您必须使用 old.id (否则会删除其他ID)
尝试将其作为新触发器:
CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
WHERE patron_info.pid = old.id;
END
不要忘记删除查询中的“;”。 此外,如果您在控制台窗口中输入TRIGGER代码,也可以使用分隔符。
答案 1 :(得分:11)
为什么不在外键patron_info
上设置ON CASCADE DELETE.pid?
答案 2 :(得分:0)
- (void)didSelectPost {
//Get session configuration
NSString * const configName = @"com.xx.xxx";
self.sessionConfiguration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:configName];
self.sessionConfiguration.sharedContainerIdentifier = @"group.xx.ShareURL";
//Init NSURLSession
self.session = [NSURLSession sessionWithConfiguration:self.sessionConfiguration];
NSURLRequest *request = [self postContentToService:self.shareUrl.absoluteString];
//post request
self.sessionTask = [self.session dataTaskWithRequest:request];
//resume
[self.sessionTask resume];
[self.extensionContext completeRequestReturningItems:@[] completionHandler:nil];
}