首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用auto_increment使一个ID依赖于另一个ID -可能吗?

使用auto_increment使一个ID依赖于另一个ID -可能吗?
EN

Stack Overflow用户
提问于 2009-06-06 09:17:12
回答 3查看 1.9K关注 0票数 0

我想为一个有几个项目的项目服务器做一个小票证系统。到目前为止,TicketID将被全局计算,即有一个项目A和一个带有TicketID 1的工单,另一个项目B,这个项目的工单将得到TicketID 2-如下所示:

代码语言:javascript
运行
复制
(TicketID, ProjectID)
(1, 1)
(2, 1)
(3, 1)
(4, 2)
(5, 2)
(6, 3)

但我认为根据ProjectID计算TicketID会更好,如下所示:

代码语言:javascript
运行
复制
(TicketID, ProjectID)
(1, 1)
(2, 1)
(3, 1)
(1, 2)
(2, 2)
(1, 3)

下面是表格:

代码语言:javascript
运行
复制
CREATE  TABLE IF NOT EXISTS tickets (
    TicketID    INT UNSIGNED NOT NULL AUTO_INCREMENT,
    ProjectID   INT UNSIGNED NOT NULL,
    ...
    PRIMARY KEY (TicketID, ProjectID) ,
    FOREIGN KEY (ProjectID) REFERENCES projects (ProjectId),    
    ...
);

有没有可能使auto_increment的TicketID依赖于ProjectID的SQL?或者,在SQL中没有办法,我必须用PHP代码手动设置I?

EN

回答 3

Stack Overflow用户

发布于 2009-06-06 09:21:56

为什么不在项目表中有一个"next ticket id“字段-当创建一个新的ticket时,获取这个值,递增它,并将ticket id设置为以前的值?显然,这一切都是在一个交易中完成的。

票数 2
EN

Stack Overflow用户

发布于 2009-06-06 11:18:33

MySQL支持以下功能:

代码语言:javascript
运行
复制
create table history (
    id integer not null,
    version integer auto_increment not null,
    content text not null,
    primary key(id,version)
);

据我所知,在Sqlite或PostgreSQL中没有直接支持这样的特性,所以我只使用:

代码语言:javascript
运行
复制
insert into history(id,version,content)
select 10,(SELECT COALESCE(MAX(version),0)+1 FROM history WHERE id=10),'Hello';

对于它们,但请记住,这不是真正的自动增量,如果您从表中删除某些内容,则可能会创建不唯一的键。

票数 1
EN

Stack Overflow用户

发布于 2009-06-06 11:12:24

老实说,我通常试图说服请求者反对这一点。有一个唯一的票号可能更好,你只需要记住/打印/显示一条信息。只要你提供门票的清单和计数,我认为这是一个更清晰的结构。当然,您的业务逻辑可能需要单独编号。如果需要一条没有中断的直线,我通常使用触发器。M.

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/959342

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档