【问题标题】:Inserting into multiple tables at once一次插入多个表
【发布时间】:2015-10-14 17:12:47
【问题描述】:

结构:

表 A)

CREATE TABLE Item (
  Id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 'Unique id of an item',
  `By` VARCHAR(50) DEFAULT NULL,
  PRIMARY KEY (Id),
  CONSTRAINT FK_Item_User_Name FOREIGN KEY (`By`)
    REFERENCES User(Name) ON DELETE NO ACTION ON UPDATE CASCADE
)

表 B)

CREATE TABLE ItemName (
  Item_Id INT(11) UNSIGNED NOT NULL COMMENT 'Item id this name is referencing',
  Language VARCHAR(5) NOT NULL COMMENT 'language code by ISO 639-2/T',
  Translation VARCHAR(50) NOT NULL COMMENT 'Item name for given language',
  PRIMARY KEY (Item_Id, Language),
  CONSTRAINT FK_ItemName_Item_Id FOREIGN KEY (Item_Id)
    REFERENCES Item(Id) ON DELETE CASCADE ON UPDATE CASCADE
)

表 C)

CREATE TABLE User (
  Name VARCHAR(50) NOT NULL,
  Password VARCHAR(50) NOT NULL,
  Salt VARCHAR(255) NOT NULL,
  Blocked TINYINT(1) DEFAULT 0,
  PRIMARY KEY (Name),
  UNIQUE INDEX UK_User_Name (Name)
)

问题:

现在我想插入一个新项目。假设用户向我们提供:

  • 翻译
  • 语言代码
  • 用户名

到目前为止我得到了什么:

我想把它放在一个事务中,然后一个接一个地插入到每个表中。但后来我被困在如何知道在 ItemName.Item_Id 字段中使用什么 Item.Id 因为 Item 表将为插入提供一个新的 Id。

我可以获得最后一个 Item.Id,但如果多个用户要同时插入一个新项目,它可能会指向另一个项目。

ps。引擎=InnoDB

【问题讨论】:

  • 我想这会对你有所帮助stackoverflow.com/questions/21185666/…
  • 谢谢,link 不过对我的帮助更多。
  • 您使用的是什么 API?例如,PHP 的 mysqli 有 last_insert_id()。
  • php mysqli。抱歉,我认为这将在查询级别实现。

标签: mysql sql insert innodb


【解决方案1】:
BEGIN;
INSERT into one table;
get the last_insert_id() -- there are many ways to do this, depending on the API
INSERT into next table...
... ;
COMMIT;

按照避免违反FOREIGN KEYs 的顺序插入。

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 2015-04-14
    • 2019-05-26
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 2017-03-18
    • 1970-01-01
    相关资源
    最近更新 更多