我不知道如何处理我的问题,我正在寻找最实用的解决方案。我必须在多个表中跟踪用户ID,我正在查看触发器和外键以解决每个用户的数据库初始插入问题。在注册时,我想在每个数据库中使用用户ID创建一行。这样,当我在代码中引用它时,它总是一个更新语句。
这是我的表格结构
CREATE TABLE `authentication` (
`userid` int(11) unsigned NOT NULL AUTO_INCREMENT,
`fname` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL,
`lname` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL,
`email` varchar(50) COLLATE utf8_unicode_ci NOT NULL DEFAULT '',
`password` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL,
`online` int(11) DEFAULT NULL,
`created_at` varchar(11) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`email`),
KEY `userid` (`userid`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
CREATE TABLE `user_progress` (
`userid` int(10) NOT NULL,
`progress_event` varchar(25) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`userid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
以下是我尝试制作的示例触发器
CREATE TRIGGER user_progress_add
AFTER INSERT ON authentication
FOR EACH ROW
BEGIN
INSERT INTO user_progress (userid, progress_status)
VALUES (NEW.userid, 'signup');
END
此触发器不起作用。它给出错误“您的SQL语法有错误;请查看与您的MySQL服务器版本对应的手册,以便在第1行的'END'附近使用正确的语法。”
我想我的问题是,我的触发器有什么问题?在这种情况下触发器比外键更好吗?