【问题标题】:MySQL auto-increment two-part primary keyMySQL自增两部分主键
【发布时间】: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


【解决方案1】:

在 MyIsam 上是可能的。我自己只是从文档中尝试过。只需满足您的需求即可。

http://dev.mysql.com/doc/refman/5.7/en/example-auto-increment.html

【讨论】:

    猜你喜欢
    • 2011-07-21
    • 1970-01-01
    • 2015-06-30
    • 1970-01-01
    • 1970-01-01
    • 2011-04-26
    • 2010-12-09
    • 2012-01-31
    • 2012-12-08
    相关资源
    最近更新 更多