我有桌子tblsessions。同时,2014-2015会议只能召开一次会议。
但是,如果我将2015-2016作为最新信息,2014-2015将不再是最新信息。
我如何在设计时在表格中实现此逻辑?
以下是等待修改的表创建代码:
create table tblsessions(
sessionid int not null auto_increment,
sessionname varchar(9) not null,
current ????
primary key (sessionid)
);
答案 0 :(得分:0)
您可以使用触发器(取决于您运行的MySQL版本)。我假设current
是一个tinyint但你可以调整到你使用的任何类型:
CREATE TRIGGER curr_check BEFORE UPDATE ON tblsessions
FOR EACH ROW
BEGIN
IF NEW.current = 1 THEN
UPDATE tblsessions SET current = 0;
END IF;
END;
编辑: A.5.3:MySQL 5.6是否具有语句级或行级触发器?
在MySQL 5.6中,所有触发器都是FOR EACH ROW-也就是说,为插入,更新或删除的每一行激活触发器。 MySQL 5.6不支持使用FOR EACH STATEMENT的触发器。
答案 1 :(得分:0)
替代解决方案:
我提出了另一个解决方案,但我想知道它是否真的是一个很好的解决方案。
我创建了两个表:
TBLSESSIONS (session)
// session is primary key and stops duplicates
TBLCURRENTSESSION (csessionid, csession)
// csessionid is auto-int
// csession is foreign key to TBLSESSIONS.session
每次用户按下[使此会话默认]按钮时,我都可以将该会话插入csession。
在代码中我可以搜索最大的csessionid并找到它作为当前会话的csession。
这也允许用户在时间切换会话。
作为MySQL DBA,您认为这是解决我的基本问题的好方法吗?您是否看到此解决方案的任何黑暗面?