【发布时间】:2013-10-20 20:49:41
【问题描述】:
我在 MySQL 中创建了一个架构(就这个问题而言)有两个表:
Projects (pid:int)
Tasks (pid:int,tid:int)
每个项目可以有多个任务,每个任务属于一个项目。我将项目中的 pid 设置为主键并在添加项目时自动递增。理想情况下,我想构造任务,以便每个任务的主键都是 pid 和 tid。对于属于同一项目的任务,tid 会递增,但对于每个新项目,tid 会再次从 1 开始。
(pid,tid) = (1,1)(1,2)(1,3)(2,1)(2,2)(3,1)(3,2)(3,3)(3,4)
我知道我可以通过查询找到项目的最高 tid 并为下一个任务手动递增它来实现此效果;但是,如果可能的话,我想在没有查询的情况下这样做。是否有更简单、更有效的方法来实现此功能(例如使用 AUTO_INCREMENT)?
我在 Python 3 中使用 Flask 微框架和 Windows 7 上的 MySQL 5.7 进行编程。
【问题讨论】:
-
每当您
INSERT一个新任务时,您都可以使用触发器来创建pid/tid值。 -
你读过这个吗? dev.mysql.com/doc/refman/5.1/en/example-auto-increment.html 似乎可以与 myisam 引擎一起使用。
-
所以我会使用触发器来计算 MySQL 内部的 tid 而不是 Python?我当然可以这样做!编辑:谢谢,凯!该链接正是我正在寻找的! (我想我现在应该熟悉 MySQL 手册了)
-
为什么需要这样做?如果
tid是Tasks 的主键,那么pid将成为返回Projects 的外键;这里不需要有一个多部分的主键。 -
我的理由是,如果任务未命名,tid 将以“(项目名称)任务#tid”的形式显示给用户。我试图避免创建新项目并且第一个任务显示为“(MyProject)任务#4018”或其他内容的情况。
标签: python mysql python-3.x flask mysql-5.7