mysql - 一次将数据插入多个表时,自动增量无法正常工作

标签 mysql

一些注意事项:我使用 INSERT IGNORE 因为我避免插入重复项。 'bookID'、'libraryID' 和 'personID' 是自增主键。

假设我的数据库中有三个表。

表 1“书籍”:

bookID | bookTitle
     1 | 1st book
     2 | 2nd book

......

表 2“库”:

libraryID | bookID(from table 'book') | libraryName
        1 |                         1 | 1st library
        2 |                         1 | 2nd library
        3 |                         2 | 2nd library

............

表 3“租赁”:

personID | libraryID(from table 'libraries') | personName
       1 |                                 2 | John
       2 |                                 3 | Shaq

........................

我尝试使用下面的查询一次将数据插入三个表中:

INSERT IGNORE INTO books (bookID,bookTitle)
VALUES ("",
        "1st book");

INSERT
IGNORE INTO libraries (libraryID,bookID,libraryName)
VALUES ("",
          (SELECT bookID
           FROM books
           WHERE bookTitle="1st book"),"1st library");

INSERT
IGNORE INTO rental (personID,libraryID,personName)
VALUES ("",
          (SELECT libraryID
           FROM libraries
           WHERE libraryName="1st library"
             AND bookID=
               (SELECT bookID
                FROM books
                WHERE bookTitle="1st book")),"Mark");

此查询有效。我正在插入数千行。问题是身份证。我在查询中将“bookID”、“libraryID”和“personID”值保留为空,并期望它是整数序列,我的意思是:1,2,3,4,5,6,7,8,9,...然而,我得到了这个:1,5,100,152,1112,3456,...所有ID都是随机数,而不是正常序列。这件事发生在所有三个表中。我想我需要以某种方式修复我的查询。

是否可以修复查询以按我想要的方式工作?

编辑: 当我开始使用较新版本的 MySQL(版本 4.1.5)时,问题就消失了。上面编写的查询按我想要的方式工作(我的不再有 auto_increment 问题)。 谢谢你们的建议。我对此表示赞赏。

最佳答案

您不应在插入中使用任何与标题相关的检查(不使用 id:s)。例如,如果您插入两本具有相同标题的书,则这不起作用。

常见的方式是这样的:

  • 插入书籍而不指定 ID 并获取新的自动递增 ID(在 PHP 中,这是通过 $mysqli->insert_id 完成的)
  • 通过选择/插入名称来创建/获取库 ID
  • 使用这些 ID 插入新的租赁(不要使用任何产权值)

租赁/借款人还应该拥有自己的带有自己的 ID 字段的表。然后只需在租赁表中链接这些 ID:即可。

关于mysql - 一次将数据插入多个表时,自动增量无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23321224/

相关文章:

mysql - 即使 MySQL 重新启动,如何设置全局 event_scheduler=ON?

php - 我如何从mysql中获取数据以表现

mysql - 如何向mysql中的现有 View 添加注释

php - SQL插入: syntax error in PHP

php - 使用两个按钮 "save"和 "save & submit"提交表单?

php - 使用PHP MYSQL的搜索方法

mysql - 查询两个没有任何关系的表

mysql - 如何改进此表的索引

php - 在我的数据库中插入新内容后如何实现通知系统?

sql - 如何在 MySQL 中表示树及其内容?