如何在MySql表中一次只使一个字段成立?

时间:2015-02-19 12:24:14

标签: mysql

enter image description here

我有桌子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)
);

2 个答案:

答案 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,您认为这是解决我的基本问题的好方法吗?您是否看到此解决方案的任何黑暗面?